如何查找程序中每个对象使用的内存?

时间:2009-04-28 01:36:43

标签: c# memory object

如何找出程序中每个对象使用的内存?

例如:我想知道这个对象“someclassinstance”使用了多少内存(以Kb为单位)..

someclass someclassinstance = new someclass();

我可以在任务管理器中看到应用程序使用的总内存...但是有没有办法查看有关每个对象实例的内存使用情况的详细报告?

注意:我已经尝试过CLR profiler ..但它只显示字符串使用的总内存,据我所知...它没有显示每个字符串对象使用的内存。

由于

5 个答案:

答案 0 :(得分:2)

.NET Memory Profiler is excellent这是一个14天的试用期,之后非常便宜。它允许您跟踪所有实例,绘制图形并查看每个实例的内存量。它可以让您深入了解应用程序中发生的情况。

答案 1 :(得分:1)

Red Gate Software制作Ants Profiler,我相信它会为您提供所需的信息。这显然是非免费的,但有15天的试用期,根据您是否有幸在工作中获得软件预算,您可以购买它。

答案 2 :(得分:1)

CLR profiler是免费的,可以做到这一点。它有一个学习曲线,但附带了您需要的文档。

答案 3 :(得分:0)

分配的内存容量是new someclass的sizeof(someclass)四舍五入;舍入可能是像sizeof(someclass)+ sizeof(void *)四舍五入到32。

这不会告诉你someclass为其成员分配的内存(如果有的话)。

执行此操作的最佳方法可能是使用记录已分配字节的包装器替换global operator new。请注意,如上所述,由于簿记和对齐原因,请求的字节数小于实际分配的字节数。

这可以用C ++完成,我不知道C#。

答案 4 :(得分:0)

免费,极其强大且相当棘手的方法是使用Windbg + SOS

这个blog post应该足以让你开始。