Mar*_*ell 27 .net garbage-collection
如果你想收到GC的通知(例如,转移收集过程中的节点之间的负载),那么你可以使用的方法,三人GC.RegisterForFullGCNotification,GC.WaitForFullGCApproach和GC.WaitForFullGCComplete-然而,通过参数GC.RegisterForFullGCNotification在很大程度上似乎是毫无意义的,并没有现实世界的指导给出了如何选择合适的价值观.有模糊的音符,像从这里:
使用以下准则指定maxGenerationThreshold和largeObjectHeapThreshold参数:
阈值越大,收集可能发生的时间越远,通知越快.
较大的阈值为运行时提供了更多检查即将到来的集合的机会.这会增加您收到通知的可能性.但是,您不应将阈值设置得太高,因为这会导致在运行时导致下一个集合之前等待更长时间.
当您使用高阈值通知自己诱导集合时,将回收更多的对象,而不是运行时的下一个集合回收的对象.
阈值越小,收集更快发生的可能性越大,通知将在稍后提出.
或者从这里开始
maxGenerationThreshold1到99之间的数字,指定何时应根据第2代中提升的对象引发通知.
largeObjectHeapThreshold1到99之间的数字,指定何时应根据在大对象堆中分配的对象引发通知.如果指定的值太高,则很可能会收到通知,但在运行时导致收集之前等待的时间可能太长.如果您自己引导集合,则可能会回收更多的对象,而不是运行时导致集合的回收对象.
如果指定的值太低,则运行时可能会在您有足够的时间通知之前导致收集.
然而,这并没有真正帮助我选择合理/正确的数字,除了"不太高,不太低".
目前,我只是使用少数提供的示例中的一个,即
// these are magic numbers; nobody really knows what they mean...
GC.RegisterForFullGCNotification(10, 10);
Run Code Online (Sandbox Code Playgroud)
但是......很不清楚10,10是一个正确的选择,一个任意的选择,或者我应该如何改变它以反映任何特定的使用场景.
那么:有没有正确的方法来选择这些数字?或者它是否只是反复试验,取决于我是否过早/迟到了事件?
ali*_*air 10
我可以在http://assets.red-gate.com/community/books/assets/Under_the_Hood_of_.NET_Management.pdf中找到有关选择这些参数的最佳答案.
您可能想知道对RegisterForFullGC通知的调用中的魔术常量.此方法采用两个参数:maxGenerationThreshold和largeObjectHeapThreshold.两个参数都可以是介于1和99之间的整数.这些参数的较大值将导致通知提前提升,较小的值将导致通知更接近事件实际发生时.
第一个参数允许您指定希望根据幸存到第2代的对象数通知,第二个参数指定您希望根据大对象堆的大小通知您.但是,两个参数都没有指定绝对值,因此在第2代中有30个对象时,为maxGenerationThreshold传入30并不意味着触发通知.它只是意味着您希望在传递10值之前得到通知.除非您对一个触发器特别感兴趣,否则您可能希望为每个参数传递相同的值,因为这样做无论触发器是什么,都可以帮助确保您在同一阶段得到通知.
较大的值将为您提供更多时间来处理内存压力,但您只需要注意不要将其设置得太高.设置阈值越高,获得通知的速度越快,但是等待GC的时间越长.在您的应用程序中使用这些参数,以查看最适合您的负载和消耗内存的对象类型.
所以作为回答,基于上面的内容,它主要是反复试验,但是你对每个参数使用的两个值可能是相同的.
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |