Dan*_*don 13 .net debugging garbage-collection
当我调试.net代码时,我怎么知道垃圾收集器何时运行?
我不希望控制垃圾收集器何时运行.我只希望能够知道它何时运行.我有一些资源耗尽的代码.我知道资源没有被使用; 我想知道GC何时运行以释放它们.
哦,我想到的资源是来自Sql连接池的连接,而不是内存:-)
一般来说,您不应该担心或考虑GC运行的时间.
垃圾收集器将在运行时选择的不确定时间根据需要运行.
如果你想要更好地控制GC(我不建议除非在特定情况下),你可以使用GC.AddMemoryPressure和GC.RemoveMemoryPressure.这些不会强制GC运行,而是提示它除了CLR分配的托管内存之外还有其他内存正在运行.这可能会导致它更频繁地运行,如果您在本机代码中分配大块内存,这将非常有用.
没有直接API来跟踪GC运行.(例如,GC类不包含任何通知发生垃圾收集的事件.)唯一直接了解GC执行时的方法是使用性能分析API.
您必须使用.NET 4.0,在预告版本中不支持您要求的内容.
基本上你在循环中调用WaitForFullGCApproach和WaitForFullGCComplete方法.WaitForFullGCApproach将阻塞,直到您看到GC,WaitForFullGCComplete将阻塞,直到GC完成.
请仔细阅读本文.如果您使用此方法,那么您有责任确保垃圾收集实际发生.如果你搞砸了,你可能会破坏GC并迅速耗尽内存.
http://msdn.microsoft.com/en-us/library/cc713687.aspx
| 归档时间: |
|
| 查看次数: |
12156 次 |
| 最近记录: |