.Net Core内存回收模式及性能测试对比分析

 更新时间:2017年12月19日 08:46:02   作者:ZKEASOFT  
下面小编就为大家分享一篇.Net Core内存回收模式及性能测试对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

.NET Core 两种GC模式:

Server GC / Workstation GC

Server GC :

主要应用于多处理器系统,并且作为ASP.NET Core宿主的默认配置。它会为每个处理器都创建一个GC Heap,并且会并行执行回收操作。该模式的GC可以最大化吞吐量和较好的收缩性。这种模式的特点是初始分配的内存较大,并且尽可能不回收内存,进行回收用时会很耗时,并进行内存碎片整理工作。用一句简单的话说,这个就是贪婪模式,通过尽可能多的获得内存和少回收来得到更好的性能。结果就是高内存使用率性能较好。

Workstation GC :

主要应用于单处理器系统,Workstation GC尽可能地通过减少垃圾回收过程中程序的暂停次数来提高性能。低负载且不常在后台(如服务)执行任务的应用程序,可以在禁用并发垃圾回收的情况下使用工作站垃圾回收。特点是会频繁回收,来阻止一次较长时间的回收。结果就是低内存使用率性能较差。

简单测试

以下测试结果都在同一台计算机上,配置如下:

•Windows 7 Ultimate

•Intel Core I3-3220 @ 3.30 GHZ

•8G内存,可用空间3GB

•SQL Server 2014

被测试的程序是ZKEACMS,首页,单面压力测试,5000个请求,1000个并发。测试结果如下:

Server GC :

响应结果如下,大概167.81 Req/s,这个结果并不是每次都一样,会有所偏差,仅供参考:

内存使用涨到差不多600多M左右,期间会有上下上下浮动,情况如下图所示:

经过反复多次的测试,内存最高时涨到800多M,这与可用内存有关系,如果可用内存更多,还会涨到1G或更高然后再掉下来:

Workstation GC :

响应结果如下图所示,大概151.33 Req/s,看起来是要比Server GC差一点点,并且多次测试结果,总体都是更差些。

内存使用情况一直在200M左右浮动,反复的压力测试,也不会有大的大起大落,这与它积极的回收有关系:

内存回收模式的切换

现在对.Net Core的不同的内存回收模式产生的影响已经有了一定的了解,那就可以看你的个人情况做出选择了。.Net Core默认的贪婪模式可以得到更好的性能,这没有什么问题是,毕竟内存不用放在那也是浪费。当然如果你的服务器上许多的程序在跑,并对内存有较高的限制要求不要影响到其它的程序,那就要做一些配置了。

开发环境

在开发环境,你可以编辑你的项目文件,加上以下配置,重新生成即可:

<PropertyGroup> 
 <ServerGarbageCollection>false</ServerGarbageCollection> 
</PropertyGroup>

生产环境

可以不用修改重新部署,直接到你的程序中找到 *.runtimeconfig.json,如:ZKEACMS.WebHost.runtimeconfig.json,修改"System.GC.Server": false,重启程序即可:

"configProperties": {
 "System.GC.Server": false
 }

参考资料:https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals

以上这篇.Net Core内存回收模式及性能测试对比分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 基于ASP.NET Core数据保护生成验证token示例

    基于ASP.NET Core数据保护生成验证token示例

    本篇文章主要介绍了基于ASP.NET Core数据保护生成验证token,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Asp.NET Core WebApi 配置文件详细说明

    Asp.NET Core WebApi 配置文件详细说明

    ASP.NET Core 提供了一套灵活的配置系统,允许开发者从多种来源加载配置数据,并根据需要使用这些配置,这篇文章主要介绍了Asp.NET Core WebApi 配置文件,需要的朋友可以参考下
    2025-04-04
  • Asp.net 基于Cookie简易的权限判断

    Asp.net 基于Cookie简易的权限判断

    基于Cookie简易的权限判断代码,需要的朋友可以参考下。
    2010-01-01
  • ASP.NET(C#)验证数字的两种方法

    ASP.NET(C#)验证数字的两种方法

    ASP.NET(C#)验证数字的两种方法,需要的朋友可以参考一下
    2013-06-06
  • Asp.net程序优化js、css实现合并与压缩的方法

    Asp.net程序优化js、css实现合并与压缩的方法

    这篇文章主要介绍了Asp.net程序优化js、css实现合并与压缩的方法,使用第三方组件实现访问时将js与css文件压缩并缓存在客户端的效果,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • Asp.net 页面导航的几种方法与比较 分享

    Asp.net 页面导航的几种方法与比较 分享

    在ASP.NET应用中,Web表单之间的导航有多种方式:用超级链接,用Response.Redirect,用Server.Transfer,或者用Server.Execute。本文将分析这四种导航方式的异同及其优缺点,帮助你选择最佳的导航方式。
    2013-07-07
  • asp.net不用设置iis实现url重写 类似伪静态路由

    asp.net不用设置iis实现url重写 类似伪静态路由

    说到不用设置iis,主要是为了实现在虚拟主机或是拿不到iis操作限的时候,不能添加isap又想实现类似于静态化的程序实现方式,先声明,这里最终要实现的效果是,最终可以用12345.html替换show.aspx?id=12345这样的地址访问功能,支持任意扩展名及无扩展
    2014-01-01
  • .NET适配器模式讲解

    .NET适配器模式讲解

    这篇文章主要为大家详细介绍了ASP.NET适配器模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • asp.net System.Net.Mail 发送邮件

    asp.net System.Net.Mail 发送邮件

    一个师弟发了段代码给我,说调试了很久发送邮件都没有成功。自己使用过程中,也发现了很多问题,但最简单的问题是“发件方”地址根本不支持smtp发送邮件。
    2009-04-04
  • ASP.NET MVC使用Knockout获取数组元素索引的2种方法

    ASP.NET MVC使用Knockout获取数组元素索引的2种方法

    这篇文章介绍了ASP.NET MVC使用Knockout获取数组元素索引的2种方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论