Fan*_*ius 11 c# garbage-collection
我的应用程序分配了大量的内存(数百万个小对象,总计几千兆字节)并且长时间保留它.
更新:Perf计数器"GC中的%时间"显示平均值为10.6%.
Wel*_*bog 24
除非您可以确认垃圾收集器正在积极地降低应用程序的性能,否则您不应采取措施来削弱运行时环境的功能.
从您的问题判断,您尚未确认GC是一个问题.我严重怀疑它是.
仅优化需要优化的内容.
看看System.Runtime.GCSettings.LatencyMode酒店.
在app.config中将GCServer属性设置为true也有助于减少GC(在我的情况下,启用时减少10倍GC).
您可以使用静态方法阻止垃圾收集器完成任何对象:
GC.SuppressFinalize(*your object*)
Run Code Online (Sandbox Code Playgroud)
更多信息: 链接文字
您可以使用性能监视器进行测量.打开perfmon并添加与.NET CLR Memory相关的性能计数器.这些计数器是特定于流程的,通过它们,您可以跟踪各代的集合数和大小,并且更加特别地为您指定"GC中的%时间".以下是此计数器的说明文字:
GC中的%时间是自上一个GC循环以来执行垃圾收集(GC)所花费的时间百分比.此计数器通常表示垃圾收集器代表应用程序收集和压缩内存所做的工作.此计数器仅在每个GC结束时更新,计数器值反映最后观察到的值; 它不是一般的.
如果您在运行程序时观察这些计数器,则应该根据您的内存决策来回答GC的频率和成本.
以下是各种GC性能计数器的良好讨论.似乎10%的边界没问题.
| 归档时间: |
|
| 查看次数: |
19538 次 |
| 最近记录: |