【C# .Net GC】GC初始化设置 和GcSetting
相关的类
GCLargeObjectHeapCompactionMode 枚举
GCLargeObjectHeapCompactionMode 枚举
属性的值 GCSettings.LargeObjectHeapCompactionMode 是 GCLargeObjectHeapCompactionMode 枚举的成员,该枚举指示下一个完全阻止性垃圾回收是否还 (LOH) 压缩大型对象堆。 默认情况下,LOH 不会压缩。 值 Gclargeobjectheapcompactionmode.compactonce 来压缩指示阻止垃圾回收将压缩 LOH。 垃圾回收后,属性的值将 GCSettings.LargeObjectHeapCompactionMode 恢复为默认值。
GcSetting 类
按需压缩大对象堆
即使使用了对象池,仍然可能会在大对象堆里分配对象,随着时间的推移,在里面会存在很多碎片。从.NET 4.5.1 开始,你可以告诉GC在下一次做完整GC时顺便也对LOH做一次压缩。
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
根据LOH的大小,这个压缩过程可能会很慢,甚至会用到好几秒。你最好是在你的程序能够长时间暂停的时候,才让垃圾回收器做一次这样的完整GC。修改该设置值,只会在下一次完整GC时会触发压缩,一旦完成了LOH的压缩,GCSettings.LargeObjectHeapCompactionMode就会被重新设置为GCLargeObjectHeapCompactionMode.Default。
因为这个过程很耗时,我还是建议你减少对LOH的分配或者使用对象池。这样将大大减少压缩的数据。压缩LOH功能只能作为碎片过多,分配的堆太大时的最后手段。
GC初始化设置
工作模式:工作站、服务器
工作方式:后台、非并发
注意:工作方式 选项只影响第 2 代中的垃圾回收;第 0 代和第 1 代中的垃圾回收始终是非并发的,因为它们完成的速度很快。
可用不用设置采用默认的工作方式。工作站默认的第2代回收方式是 后台,服务器默认第2代回收方式是非并发的。
.net core 在.csproj 文件添加:
注意:根据.csproj 文件中配置 自动生成对应 【ProjectName】.runtimeconfig.json文件的项。工作站默认interactive(开启并发), 服务器默认Batch(关闭并发)。
工作模式:服务器
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
//true 是服务器模式,fasle 是工作台模式
</PropertyGroup>
工作方式:后台
<PropertyGroup>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
//true 为后台对应的LatencyMode=interactove,false 为非并发对应的LatencyMode=Batch
</PropertyGroup>
或者可以在ConsoleApp8.runtimeconfig.json 文件中直接添加代码:

"configProperties": {
"System.GC.Concurrent": true, //true 为后台对应的LatencyMode=interactove,false 为非并发对应的LatencyMode=Batch
"System.GC.Server": false//true 是服务器模式,fasle 是工作台模式
}
代码中查看配置结果:
//查看GC的初始配置:类型、工作方式以及微调工作方式。 类型、工作方式在.json或xml文件中修改。不过可用在程序运行时候微调
Console.WriteLine($"IsServerGC:{GCSettings.IsServerGC}");// 是否服务器GC
Console.WriteLine($"IsConcurrent:{System.GC.GetGCMemoryInfo().Concurrent}");//工作方式 System.GC
Console.WriteLine($"LatencyMode:{GCSettings.LatencyMode}");// 微调工作方式状态
在程序中微调工作方式:
工作站默认interactive(开启并发), 服务器默认Batch(关闭并发)。
using System.Runtime;
//查看GC的初始配置:类型、工作方式以及微调工作方式。 类型、工作方式在.json或xml文件中修改。不过可用在程序运行时候微调
Console.WriteLine($"IsServerGC:{GCSettings.IsServerGC}");// 是否是服务器GC
Console.WriteLine($"IsConcurrent:{System.GC.GetGCMemoryInfo().Concurrent}");//工作方式 System.GC
Console.WriteLine($"LatencyMode:{GCSettings.LatencyMode}");// 微调工作方式状态 Console.WriteLine("GC的工作方式进行微调 将默认的模式修改成Batch");
GCLatencyMode oldGCL=GCSettings.LatencyMode;//获取当前进程 GC 工作方式的微调模式
try
{
GCSettings.LatencyMode = GCLatencyMode.Batch;
//要执行其他代码
}
finally
{ Console.WriteLine($"IsConcurrent:{System.GC.GetGCMemoryInfo().Concurrent}");// //System.GC
Console.WriteLine($"LatencyMode:{GCSettings.LatencyMode}");// 工作方式
//修改回去
GCSettings.LatencyMode=oldGCL;
}
【C# .Net GC】GC初始化设置 和GcSetting的更多相关文章
- GC 的认识(转) https://github.com/qcrao/Go-Questions/blob/master/GC/GC.md#1-什么是-gc有什么作用
1. 什么是 GC,有什么作用? GC,全称 Garbage Collection,即垃圾回收,是一种自动内存管理的机制. 当程序向操作系统申请的内存不再需要时,垃圾回收主动将其回收并供其他代码进行内 ...
- UI设计之PS界面初始化设置
一.PS界面初始化 1.新建设置 web设计的基础标准:宽度为1920px,高度自定义,分辨率72px,背景模式RGB 8位.(提示:可以“存为预设”以便以后直接调用) 注意:背景内容为透明!!! ...
- STM8S TIM1 PWM初始化设置
#define TIM1_DIV1 (uint16)(1-1) #define TIM1_DIV2 (uint16)(2-1) #define TIM1_DIV4 (uint16)(4-1) #def ...
- STM8S TIM4 初始化设置
#define TIM4_DIV1 (unsigned char)0 #define TIM4_DIV2 (unsigned char)1 #define TIM4_DIV4 (unsigned ch ...
- STM8S ADC初始化设置及应用
//ADC通道号定义 #define ADC_Chanel0 (unsigned char)0x00 #define ADC_Chanel1 (unsigned char)0x01 #define A ...
- Confluence 6 配置推荐更新邮件通知默认的初始化设置
Confluence 为订阅者发送常规邮件报告,这个邮件报告中包含有用户具有查看权限的空间的最新的内容.这个被称为 推荐更新(Recommended Updates)通知. 如果你具有 Conflue ...
- 如何设置vim中tab键缩进---配置初始化设置
转载自:http://blog.51cto.com/xuding/1725376:加了一些补充说明 问题: Linux系统下,Tab键默认为8个字符,需呀将其修改为4个字符的方式使用 步骤: 1.在用 ...
- CSS初始化设置
在网页开发时,由于浏览器默认加载的css样式使得页面显示的样式出现一些意想不到的意外样式,所以首先要进行css的初始化设置. 此外一些常用的样式,比如浮动等也可以放到初始化中备用.
- 搭建yum本地源_阿里云CentOS服务器初始化设置
CentOS服务器初始化设置其实不分阿里云或其它服务器了,操作配置过程与步骤也差不多一.挂载硬盘 1.磁盘分区 fdisk -l #查看设备,一般可以看到设备名为/dev/xvdb fdisk /de ...
随机推荐
- 从SQL Server数据库导出SQL语句
不同于直接 备份/恢复 或者 导入/导出 数据库操作. 新版本SQL Server客户端中还可以生成相对应的SQL语句. 非常方便与查看和与其他人共享. 连接上数据库后, 右击数据库, 选择 Gene ...
- MySql服务器逻辑架构
一.MySql服务器逻辑架构图 每个虚线框都是一层: 第一层:最上层的服务器不是MySql所独有的,大多数基于网络的客户端/服务器工具或者服务都有类似的系统.比如链接处理,授权认证,安 ...
- CSS基本语法(二)
目录 CSS基本语法(二) 八.CSS复合选择器 1.后代选择器** 2.子选择器 3.并集选择器** 4.伪类选择器 链接伪类选择器 :focus伪类选择器 总结 九.CSS的元素显示样式 1.概念 ...
- Natasha 4.0 探索之路系列(四) 模板 API
Natasha 模板 Natasha 在编译单元的基础上进行了封装整理, 并提供了多种模板帮助开发者构建功能. 使用此篇的 API 前提是您对 C# 非常熟悉, 对系统的一些类型足够了解. 据此 Na ...
- 加深对AQS原理的理解示例二:自己设计一个同步工具,同一时刻最多只有两个线程能访问,超过线程将被阻塞
/** *@Desc 设计一个同步工具,同一时刻最多只有两个线程能访问,超过线程将被阻塞<br> * 思路分析: * 1.共享锁 两个线程及以内能成功获取到锁 * 2. *@Author ...
- gorm连接mysql的初始化配置
包含mysql配置.gorm配置.连接池配置.log日志配置 init_db_log.go文件代码 package main import ( "fmt" "gorm.i ...
- ansible roles实践——安装java
[root@master] /etc/ansible$ cat roles/java/tasks/main.yml ---- name: unzip jdk unarchive: src=jdk-8u ...
- Java继承的概念与实现
// 方法 public class Demo { public static void main(String[] args) { Teacher t = new Teacher(); t.name ...
- 面向次世代的Windows App SDK 近况
Project Reunion作为面向次世代Windows App Development的统一工具集.在2021年11月,第三个稳定版正式以1.0的版本号发布的同时,改名部果断出手,以全新的名称Wi ...
- AT2348 [ARC070D] HonestOrUnkind
不妨先从无解的情况下手,不难发现当 \(A \le B\) 时是一定无解的. 因为不诚实的 \(B\) 个人可以装作是诚实的,全部说自己这一方是诚实的对方是不诚实的我们就无法判断了. 下面我们就可以在 ...