我想编写一个实用类,帮助我确定某段代码产生了多少垃圾。
我想要这样使用它:
GarbageProfiler.Start();
和 int numGarbage = GarbageProfiler.End();
这个想法很简单。但是这么做有意义吗?是否有工具可以做到这一点?
我想编写一个实用类,帮助我确定某段代码产生了多少垃圾。
我想要这样使用它:
GarbageProfiler.Start();
和 int numGarbage = GarbageProfiler.End();
这个想法很简单。但是这么做有意义吗?是否有工具可以做到这一点?
已经有相当多的内存分析器可供使用。在Google上进行快速搜索即可找到几个。
甚至还有一个.Net应用程序的内存分析API。
一个引用后面的垃圾数量会因为它是否持有对象的最后一个引用而在每次运行时改变。因此,预测垃圾的数量非常困难。
在GC.Collect()
之前和之后读取一些性能计数器可能会给你一个想法。
我确实质疑这一切的使用;你永远不知道GC何时启动,因此你不知道垃圾何时被回收。而调用GC.Collect()并不是一个很好的主意(大多数情况下)。