3 回答
TA贡献1796条经验 获得超7个赞
GCLatencyMode oldMode = GCSettings.LatencyMode;
// Make sure we can always go to the catch block,
// so we can set the latency mode back to `oldMode`
RuntimeHelpers.PrepareConstrainedRegions();
try
{
GCSettings.LatencyMode = GCLatencyMode.LowLatency;
// Generation 2 garbage collection is now
// deferred, except in extremely low-memory situations
}
finally
{
// ALWAYS set the latency mode back
GCSettings.LatencyMode = oldMode;
}
这将使您能够尽可能多地禁用GC。直到:
你打电话 GC.Collect()
您设置GCSettings.LatencyMode为除LowLatency
操作系统向CLR发送低内存信号
执行此操作时请小心,因为当您处于该try块中时,内存使用量可能会急剧上升。如果GC正在收集,则表示这样做是有原因的,只有在系统上有大量内存时,才应认真考虑这一点。
关于问题三,如果通过文件系统I / O或网络接收信息,也许可以尝试重用字节数组之类的对象?如果您要将这些信息解析为自定义类,也可以尝试重用它们,但是在不了解您的确切操作的情况下,我不能给出太多好的建议。
以下是一些MSDN文章也可以提供帮助:
延迟模式
约束执行区(这就是我们称之为PrepareConstrainedRegions())的原因
注意: GCSettings.LatencyMode = GCLatencyMode.LowLatency只能在设置GCSettings.IsServerGC == false。IsServerGC可以更改为App.config:
<runtime>
<gcServer enabled="false" />
</runtime>
添加回答
举报