在C#应用程序中运行时的所有变量的记忆使用情况



将我的C#应用中的内存足迹降低到限制以下(左右1-2GB),我很想在实时(运行时)看到所有变量的列表,他们吃了多少记忆(甚至内容物)。

从我所看到的,这个看似简单的请求似乎已经消除了内存介绍者的注意。。

尽管我还没有尝试过Dottrace或Ants Memory Profiler,但也扫描FAQ,视频和屏幕截图也吸引了空白。

除了我自己的变量之外,所需的剖面师可能会包含任何.NET应用程序典型的"开销"内存使用量,尽管对我而言,这并不重要。

是否有任何程序(最好是免费的或以下100美元以下)可以这样做?

---------------------编辑

对于互相引用的变量(如乔恩·斯基特(Jon Skeet)所示),或者对于通过参考方法传递的变量,探查者可以将它们分组以表明它们确实是相同的对象(因此'share nose'相同的内存),或仅显示原始变量名称并省略引用。

,但似乎不允许更细的粒度显示每个命名变量的内存。

这可能是因为这没有多大意义。变量本身通常不会占用很多内存 - 它是对象占据内存,变量只是阻止这些对象被收集到垃圾。

因此,请考虑以下代码:

byte[] array = new byte[1024 * 1024]; // 1MB
byte[] array2 = array;
byte[] array3 = array;

在这里,我们有三个变量,所有变量都指同一数组。您所需的工具会显示它们每个人都有多少内存?1MB,因为每个人都指1MB数组?这将是令人困惑的,因为尽管实际使用了1MB,但所显示的总记忆将是3MB。0.33333MB?当然更令人困惑。1MB?有点准确,但无济于事。

您应该集中精力对象保持比您想要的更长的生命,然后弄清楚使这些对象活着的是什么。

通常,如果"看似简单的请求"似乎已经"逃脱了专门从事该地区的人的注意力",那是因为不是一个简单的请求。

最新更新