2014-12-05 257 views

回答

0

内存在Windows是一个相当复杂的事情:有很多不同的测量。看看here(大概半路)开始。

但是,您可以猜测,Profiler使用的57MB专用字节与任务管理器使用的55MB相同。搜索Windows Memory Private Bytes(我认为它与链接页面中的Private Working Set相同)。

我不知道如何组织内存的任何简单摘要。但是,除了您正在使用的简单对象之外,还有更多内存加载到内存中。有你的代码(必须加载或不能运行),.NET运行时,Stacks可以跟踪代码中的位置以及当前方法结束时返回的位置等等。等等。一些内存可以在不同的进程之间共享,如果它不会被改变:.NET运行时,你自己的代码(可能)。一些不会被共享:你的数据,你的堆栈。

分配内存不仅仅是“哦,你需要存储一个50字节的字符串 - 在这里你!”。一次分配50个字节效率低下。你的程序在开始时会抓取一大堆内存(实际上称为堆),然后逐渐使用它。当它被全部使用时,它将更多地获得堆。我不确定什么.NET运行时作为默认值 - 可能至少为64K,但可能更多。正如我所说,这很复杂。

0

专用字节是进程分配的页面。这通常用于存储数据。

CLR代表您的托管应用程序分配内存。这反映在专用字节中。这个内存 - 托管堆 - 以块分配。托管应用程序创建存储在托管堆上的对象。除了托管堆外,CLR还分配内部使用的内存。这也增加了专用字节。

对象的总大小是当前分配的对象的大小的总和。该数字总是小于专用字节。