我的程序分配了大量包含长寿命DAWG的实例.在构建这个DAWG的过程中,有时候进度会减慢100倍,这与.NET执行gen 2 GC集合完全相关.在这些期间,"GC中的%时间"为99.5%,"总第2代收集"每隔几秒递增一次.经过几次背靠背第二代收集,他们停止触发没有明显的原因,程序再次加速.几分钟后,循环重新开始.
我创建的实例数量大约为2500万,并且它们占用了几GB的RAM,所以第2代集合花费这么长时间并不太令人惊讶.令人惊讶的是,第二代收藏品出现在"火车"中,并不断被触发.
如果不重新思考我的方法,我能以某种方式阻止这种情况吗?也许有一些方法可以让.NET暂停第2代收藏,直到另行通知?除了这些事件之外,程序运行非常有效,因此除了这种不幸的角落行为之外,.NET显然完全可以完成这项任务.
(我尝试将GCSettings.LatencyMode设置为GCLatencyMode.Batch,但问题仍然存在.GC开始发生时的可用物理RAM量大约为1GB.这是在64位计算机上.)