如何找出程序中每个对象使用的内存?
例如:我想知道这个对象“someclassinstance”使用了多少内存(以Kb为单位)..
someclass someclassinstance = new someclass();
我可以在任务管理器中看到应用程序使用的总内存...但是有没有办法查看有关每个对象实例的内存使用情况的详细报告?
注意:我已经尝试过CLR profiler ..但它只显示字符串使用的总内存,据我所知...它没有显示每个字符串对象使用的内存。
由于
答案 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应该足以让你开始。