我有一个奇怪的情况,我想弄明白.
创世纪:
我在具有16个内核和128GB RAM 的物理机器上运行我的程序.我试图确定为什么它没有使用所有可用的内核,通常它平均使用20-25%的CPU(因此16个中的4-5个内核).当我查看性能计数器时,它们显示垃圾收集时间为60-70%.
作为参考,我使用.NET Framework 4和TPL(Parallel.ForEach)来线程化程序中性能密集的部分.我将线程数限制为核心数.
问题:
我创建了大量的对象,对于垃圾收集器来说有太多的处理效率,因此它在垃圾收集器中花费了大量的时间.
到目前为止简单解决方案:
我正在引入对象池以减少垃圾收集器的压力.我将继续汇集对象以提高性能,已经将一些对象集中在一起,将垃圾收集从60-70%减少到45%的时间,我的程序运行速度提高了40%.
唠叨问题(我希望你能回答我的问题):
运行时我的程序使用最多14GB的可用RAM,而128GB的RAM则相当小.这台机器上没有其他东西在运行(它纯粹是我的测试台),并且有足够的RAM可用.
编辑:
我已经在使用服务器垃圾收集器的选项...我需要知道的是什么是触发gen2集合,而不是服务器垃圾收集器更好(我已经知道).
我知道GC触发的逻辑并不简单,但它有一定的监控阈值.
任何人都知道.NET 4工作站和服务器GC的这些阈值是多少?
谢谢