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>
添加回答
舉報