如果之前的使用超出了它声明的分配,我找不到调用GC.TryStartNoGCRegion
的方法。在这种情况下,GC.EndNoGCRegion
会根据文档抛出,并且对TryStartNoGCRegion
的新调用也会抛出:
GC.TryStartNoGCRegion(1000*10000);
//Allocate more than declared
for (int i = 0; i < 1100; i++)
{
var arr = new byte[10000];
}
//Line below throws as it should
//System.GC.EndNoGCRegion();
//Not NoGCRegion
Console.WriteLine(System.Runtime.GCSettings.LatencyMode);
//Throws with "The NoGCRegion mode was already in progress
GC.TryStartNoGCRegion(1000*10000);
如何再次启动无GC模式?
2条答案
按热度按时间snvhrwxg1#
试试这个:
明显的区别在于,在尝试再次调用
TryStartNoGCRegion
之前,必须先调用EndNoGCRegion
(并吞下异常)。pxy2qtax2#
我知道这是一个老问题,无论如何,我只是想留下一个说明,这是一个错误,它已经在this PR与this提交修复。修复是可用的.NET核心3.1或以上。