被私有(private)字节搞糊涂了!
目前正在使用 ANTS 分析器分析我们的 C# .NET 应用程序的内存使用情况。以下是我们在启动后在屏幕上看到主窗体后的发现。没有使用其他功能。
第 0 代堆 - 5.8MB
第 1 代堆 - 2.5MB
第 2 代堆 - 13.9MB
所有堆中的字节数 - 17MB
大对象堆 - 0.7MB
私有(private)字节 - 130MB
工作集 - 150MB
如果所有堆中的字节只有 17MB,为什么我们有这么大的私有(private)字节分配?私有(private)字节是由系统分配的还是私有(private)字节从零开始扩展,因为它被软件填充?即 私有(private)字节是一个实际上可能只被部分使用的气泡吗?如果是这样,是什么决定了它的大小?
最佳答案
私有(private)字节是一个进程的所有虚拟分配,不能与其他进程共享(即不包括代码和内存映射文件)。这将包括所有 NT( native )堆、任何托管堆、堆栈和应用程序显式分配的任何内存(VirtualAlocEx)。
您可以使用 !dumpheap -stat
获取 CLR 内存使用情况的详细信息。参见 CLR Memory Leak
关于c# - .net 内存使用情况,决定私有(private)字节大小的因素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536276/