【C# GC】垃圾回收的工作模式
2022/2/23 17:21:25
本文主要是介绍【C# GC】垃圾回收的工作模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
工作站和服务器垃圾回收
使用条件:进程终止前不会改变,不过可用通过GCsetting类的GClatencyMode进行控制。
工作站
该模式针对客户端应用程序优化GC.GC造成的延时很低,应用程序线程挂起时间很短,避免使用户感到焦虑。在该模式中,GC假定机器上运行的其他应用程序都不会消耗太多的CPU资源。
工作站垃圾回收既可以是并发的,也可以是非并发的。 并发(或后台 )垃圾回收使托管线程能够在垃圾回收期间继续操作。 后台垃圾回收替换 .NET Framework 4 及更高版本中的并行垃圾回收。
服务器
该模式针对服务器端应用程序优化GC。被优化的主要是吞吐量和资源利用。GC假定机器上没有运行其他应用程序(无论客户端还是服务器应用程序),并假定机器的所有CPU都可用来辅助完成GC。该模式造成托管堆被拆分成几个区域(section),每个CPU一个。开始垃圾回收时,垃圾回收器在每个CPU上都运行一个特殊线程;每个线程都和其他线程并发回收它自己的区域。对于工作者线程(worker
thread)行为一致的服务器应用程序,并发回收能很好地进行。这个功能要求应用程序在多CPU计算机上运行,使线程能真正地同时工作,从而获得性能的提升。
-
在 .NET Core 中,服务器垃圾回收既可以是非并发也可以是后台执行。
-
在 .NET Framework 4.5 和更高版本中,服务器垃圾回收既可以是非并发也可以是后台执行。 在 .NET Framework 4 和以前的版本中,服务器垃圾回收非并行运行
应用程序默认以“工作站”GC模式运行。寄宿了CLR的服务器应用程序(比如ASP.NET或Microsoft SQL Server)可请求CLR加载“服务器”GC.但如果服务器应用程序在单处理器计算机上运行,CLR将总是使用“工作站"GC模式。
独立应用程序可创建一个配置文件告诉CLR使用服务器回收器。配置文件要为应用程序添加一个gcServer元素。下面是一个示例配置文件:
<configuration> <runtime> <gcServer enabled="true"/> </runtime> </configuration>
应用程序运行时,可查询GCSettings类的只读Boolean属性IsServerGC来询问CLR它是否正在“服务器”GC模式中运行:
using System; using System.Runtime; // GCSettings is in this namespace public static class Program { public static void Main() { Console.WriteLine("Application is running with server GC=" + GCSettings.IsServerGC); } }
除了这两种主要模式,GC还支持两种子模式:并发(默认)或非并发。
在并发方式中,垃圾回收器有一个额外的后台线程,它能在应用程序运行时并发标记对象。一个线程因为分配对象造成第0代超出预算时,GC首先挂起所有线程,再判断要回收哪些代。
事实上,垃圾回收器更倾向于选择不压缩。可用内存多,垃圾回收器便不会压缩堆;这有利于增强性能,但会增大应用程序的工作集。
为了告诉CLR不要使用并发回收器,可创建包含geConcurrent元素的应用程序配置文件。下面是配置文件的一个例子:
<configuration> <runtime> <gcConcurrent enabled="false"/> </runtime> </configuration>
这篇关于【C# GC】垃圾回收的工作模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#