我可以在性能监视器中使用哪个计数器来查看有多少内存在等待 GC?
Posted
技术标签:
【中文标题】我可以在性能监视器中使用哪个计数器来查看有多少内存在等待 GC?【英文标题】:Which counter can I use in performance monitor to see how much memory is waiting for the GC? 【发布时间】:2010-01-28 21:40:33 【问题描述】:我正在尝试分析我的 ASP.NET 站点的特定页面以优化内存使用,但是 .NET 作为垃圾收集语言的性质使得很难真正了解内存的使用和释放方式在程序中。
是否有性能计数器或其他分析方法可以让我不仅查看分配了多少内存,还可以查看程序释放了多少内存并等待垃圾回收?
【问题讨论】:
【参考方案1】:实际上,机器中没有任何东西真正知道等待垃圾回收的是什么:垃圾回收正是找出这一点并释放死对象对应的内存的过程。充其量,GC 只会在其循环中的某些非常特定的时刻获得该信息。检测和释放部分通常是交错的(这取决于 GC 技术),因此 GC 可能永远不会完整计算可以释放的部分。
对于大多数 GC,获取此类信息的计算成本很高。如果你准备在它上面花费一点 CPU 时间(它不会对应用程序透明),那么你可以使用 GC.Collect()
强制 GC 运行,然后立即调用 GC.GetTotalMemory()
以了解多少内存在 GC 中幸存下来。请注意,强制 GC 可能会导致明显的暂停,也可能会降低整体性能。
这是“自制”方法;要进行更认真的分析,请尝试使用专用的分析器。
【讨论】:
GC.Collect() 真的能确保 GC 运行吗..?【参考方案2】:我能够分析内存的最佳方法是使用来自RedGate 的 ANTS Profiler。您可以查看快照、它处于生命周期的哪个阶段等等。包括实际的对象值。
【讨论】:
以上是关于我可以在性能监视器中使用哪个计数器来查看有多少内存在等待 GC?的主要内容,如果未能解决你的问题,请参考以下文章