我正在尝试分析我的ASP.NET站点的特定页面以优化内存使用,但.NET作为垃圾收集语言的本质使得很难真实地了解内存的使用和释放方式在该计划中。
是否有一个perfmon计数器或其他分析方法,这样我不仅可以看到分配了多少内存,还可以查看程序释放了多少内存,只是在等待垃圾回收?
答案 0 :(得分:2)
我能够分析内存的最佳方法是使用RedGate中的ANTS Profiler。您可以查看快照,它所处的生命周期的哪个阶段等等。包括实际对象值。
答案 1 :(得分:2)
实际上,机器中没有任何东西真正知道等待垃圾收集的是什么:垃圾收集正是计算出来并释放与死对象相对应的内存的过程。最好的情况是,GC只会在其周期中的某些特定时刻提供该信息。检测和释放部分通常是交错的(这取决于GC技术),因此GC可能永远不会完全计算可以释放的内容。
对于大多数GC,获得这样的信息在计算上是昂贵的。如果您准备花费一些CPU时间(它对应用程序不透明),那么您可以使用GC.Collect()
强制GC运行,然后立即调用GC.GetTotalMemory()
知道GC存活了多少内存。请注意,强制GC可能会导致明显的暂停,也可能会降低整体性能。
这是“自制”方法;要进行更严肃的分析,请尝试使用专门的分析器。