C#幽会艺术中心';NoGCRegion模式已经在进行中';GC处于LowLatency模式时发生异常

C#幽会艺术中心';NoGCRegion模式已经在进行中';GC处于LowLatency模式时发生异常,c#,.net-core,garbage-collection,C#,.net Core,Garbage Collection,我想开一家酒吧。在此之前,我检查GC是否已经在NoGCRegion中。我的调试器说它还没有,但它仍会像以前一样抛出。 下面是上下文的周围代码: var firstTurn=true; GCSettings.LatencyMode=GCLatencyMode.LowLatency; while(state0.Round

我想开一家酒吧。在此之前,我检查GC是否已经在NoGCRegion中。我的调试器说它还没有,但它仍会像以前一样抛出。 下面是上下文的周围代码:

var firstTurn=true;
GCSettings.LatencyMode=GCLatencyMode.LowLatency;
while(state0.Round

我做错了什么?当我检查之前是否正确时,运行时怎么会说NoCGRegion模式正在进行。

问题是代码多次调用TryStartNoGCRegion,以嵌套方式(备注)建议:

您不能嵌套对TryStartNoGCRegion方法的调用,您应该这样做 仅当运行时当前处于“否”状态时调用EndNoGCRegion方法 GC区域延迟模式。换句话说,你不应该打电话 TryStartNoGCRegion多次(在第一次方法调用之后, 后续调用将不会成功),您不应期望调用失败 EndNoGCRegion成功仅仅是因为第一次呼叫 幽会成功了

无法调用EndNoGCRegion,因为GC处于低延迟模式:

if(GCSettings.LatencyMode==GCLatencyMode.NoGCRegion) GC.EndNoGCRegion()

因此,在循环的下一次迭代中,代码尝试再次进入NoGCRegion并发出砰砰声:

if(GCSettings.LatencyMode!=GCLatencyMode.NoGCRegion) TryStartNoGCRegion(15728640,真实)


值得指出的是,文档中的注释提供了许多关于此类功能的警告,以及关于它可能根本无法工作的警告,即使代码正确调用了它。就个人而言,我会尝试找到一个根本不需要和GC交互的解决方案;我想到了一个问题。

在执行GC敏感工作时进入循环之前,您是否尝试过输入一次
NoCGRegion