4

被私有字节搞糊涂了!

目前正在使用 ANTS 分析器分析我们的 C# .NET 应用程序的内存使用情况。以下是我们在屏幕上可见的主窗体启动后的发现。没有使用其他功能。

Gen 0 堆 - 5.8MB
Gen 1 堆 - 2.5MB
Gen 2 堆 - 所有堆中的 13.9MB
字节 - 17MB
大对象堆 - 0.7MB
私有字节 - 130MB
工作集 - 150MB

如果所有堆中的字节只有 17MB,为什么我们有这么大的私有字节分配?私有字节是由系统分配的,还是在软件填充时从零开始扩展?即私有字节是一个实际上可能只被部分使用的泡沫吗?如果是这样,是什么决定了它的大小?

4

2 回答 2

1

来自 Red-Gate:关于“私有字节”的一般信息

私有字节包括 .NET 堆上的可用空间以及非托管内存使用情况。

于 2012-07-18T07:29:52.153 回答
1

私有字节是进程的所有虚拟分配,不能与其他进程共享(即不包括代码和内存映射文件)。这将包括所有 NT (native) 堆、任何托管堆、堆栈和任何由应用程序 ( VirtualAlocEx ) 显式分配的内存。

您可以使用!dumpheap -stat获取 CLR 内存使用情况的详细使用情况。请参阅CLR 内存泄漏

于 2012-07-18T07:55:02.993 回答