gpt4 book ai didi

.Net核心级的性能优化(GC篇)

转载 作者:我是一只小鸟 更新时间:2023-10-13 15:02:53 35 4
gpt4 key购买 nike

1.前言

大部分人对于.Net性能优化,都停留在业务层面。或者简单的.Net框架配置层面。本篇来看下.Net核心部分GC垃圾回收配置:保留VM,大对象,独立GC,节省内存等.Net8里面有很多的各种GC配置,用以帮助你的程序进行最大程度性能提升和优化.

文章分为两部分,第一个是GC有哪些动作可以性能最大的优化,第二部分就是如何配置这些动作以便让你的程序达到这些性能效果.

2.GC动作

1 .节省内存:System.GC.ConserveMemory(默认值为0) 。

2 .独立GC:DOTNET_GCName(默认值,coreclr.dll的默认GC) 。

3 .大型对象堆阈值DOTNET_GCLOHThreshold(默认值85000字节,指定值必须大于其) 。

4 .允许大型对象DOTNET_gcAllowVeryLargeObjects(默认垃圾回收大于2GB的数组,也就是默认值为1) 。

5 .大型页面DOTNET_GCLargePages,指示堆硬限制是否使用大型页面 DOTNET_GCLargePages(默认值为0,也即是不使用) 。

6 .保留VM,DOTNET_GCRetainVM。意思是把一个经过垃圾回收,没有对象的段是被系统回收还是放在堆段列表,以便下次使用.(默认值false,被系统回收) 。

7 .高内存百分比DOTNET_GCHighMemPercent,当物理内存负载大于其指定的值的时候,进行完整的垃圾回收,以便腾出跟多空间(默认负载阈值介于90%到 97%之间) 。

8 .对象堆限制百分比 。

DOTNET_GCHeapHardLimitSOHPercent,DOTNET_GCHeapHardLimitLOHPercent,DOTNET_GCHeapHardLimitPOHPercent.分别为小对象堆,大对象堆,固定堆的限制百分比.

9 .对象堆限制 。

DOTNET_GCHeapHardLimitSOH,DOTNET_GCHeapHardLimitLOH,DOTNET_GCHeapHardLimitPOH可以根据每个对象堆指定 GC 的允许堆使用量 。

10 .堆限制百分比DOTNET_GCHeapHardLimitPercent默认值(仅在某些情况下适用)是20MB或容器内存限制的75%(以较大者为准) 。

11 .堆限制DOTNET_GCHeapHardLimit默认值(仅在某些情况下适用)是20MB或容器内存限制的75%(以较大者为准) 。

12 .关联DOTNET_GCNoAffinitize指定是否将垃圾回收线程与处理器关联。若要关联一个 GC 线程,则意味着它只能在其特定的 CPU 上运行。为每个 GC 线程创建一个堆.

13 .CPU组DOTNET_GCCpuGroup,配置垃圾回收器是否使用CPU组。(默认值为0,表示不会跨CPU组) 。

14 .关联范围DOTNET_GCHeapAffinitizeRanges,指定用于垃圾回收器线程的处理器列表。以逗号分隔的处理器编号列表或处理器编号范围。 Unix 示例:“1-10,12,50-52,70” Windows 示例:“0:1-10,0:12,1:50-52,1:70” 。

15 .关联掩码DOTNET_GCHeapAffinitizeMask,指定垃圾回收器线程应使用的确切处理器数.

16 .堆计数DOTNET_GCHeapCount限制通过垃圾回收器创建的堆数.

3.配置

配置这些GC设置,主要是可以从三个方面来配置。 其一 :运行时配置文件runtimeconfig.json 以保留VM为例

                        
                          {
   "runtimeOptions": {
      "configProperties": {
         "System.GC.RetainVM": true
      }
   }
}

                        
                      

其二 :MSbuild配置 以保留VM为例

                        
                          <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
  </PropertyGroup>
</Project>

                        
                      

其三 :环境变量配置 。

                        
                          Windows CMD:
set DOTNET_GCRetainVM=true

Windows Powershell:
$env:DOTNET_GCRetainVM=true

Unix/Linux
export DOTNET_GCRetainVM=true

                        
                      

以上16个GC动作均可以通过这个三个配置方式来进行配置.

参考微软官网

https://learn.microsoft.com/en-us/dotnet/core/runtime-config/garbage-collector 。


欢迎关注公众号: jianghupt ,文章首发,以及更多高阶内容分享.

最后此篇关于.Net核心级的性能优化(GC篇)的文章就讲到这里了,如果你想了解更多关于.Net核心级的性能优化(GC篇)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com