c# - .net 内存使用情况,决定私有(private)字节大小的因素

标签 c# memory-management memory-leaks working-set

被私有(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/

相关文章:

c# - MVC - 即使没有人登录应用程序也运行计划任务

c++ - C++ 中的自定义分配器有什么问题?

android - Messenger 到远程服务导致内存泄漏

c# - 计算列表中所有整数的出现次数

c# - 如何复制 Azure 表

c# - C# 中的异步编程

c# - CLR 是如何进行内存管理的

javascript - 为什么这是 JavaScript 中的内存泄漏?

ios - main 方法和 block 中的内存泄漏

c# - C# Winforms 应用程序中总进程内存使用量的自相矛盾的报告