为什么.NET会为我的应用程序保留这么多内存?

Mar*_*ijn 5 .net c# memory winforms

当我运行我的应用程序时,在一个分析器中,我看到它使用了大约80MB的内存(总提交字节数,性能计数器).但是当我查看分配内存的大小时,它超过400MB!

所以我的问题是,为什么.NET为我的应用程序保留了这么多内存?这是正常的吗?

Kri*_*hna 7

你应该阅读Memory Mystery.我前一段时间遇到过类似的问题,在读完之后就不再问自己了.我读了其他消息来源,但我现在找不到,使用关键词"无理分配内存窗口操作系统".简而言之,操作系统提供的功能超出了您的应用程序所需的内容,具体取决于物理上可用的内存资源,例如,如果您在具有不同RAM的两台计算机上运行应用程序,则可以保证这两台计算机将具有不同的内存分配

  • 链接再次失效。 (2认同)

And*_*tan 1

毫无疑问,您知道,实际使用的内存和分配的内存之间存在巨大差异。应用程序分配的内存并不意味着它实际上在任何地方使用; 它真正的意思是操作系统已经“标记”了一个虚拟内存区域(确切地说是虚拟内存)可供应用程序使用。

内存不一定会被使用或导致其他进程挨饿 -如果应用程序开始填充它,则可能会出现这种情况。

这个分配的数量也可能会根据机器的整体内存生态系统进行扩展。如果应用程序启动时有足够的空间,那么它可能会比空间较少的情况获得更大的分配。

这一原则与创建一个具有合理初始容量的项目是良好实践的原则相同,List<T>这意味着在需要调整大小之前可以添加相当数量的项目。操作系统对内存使用采取相同的方法。

  • 不仅仅是.Net,操作系统在内存预留中也发挥着重要作用。基本上,Windows 会说“我有 16GB 物理 RAM,我想我会分配 1GB 给这个进程...” **对于完全相同的应用程序,*不同的机器***,它可能会说“我有 4GB 物理 RAM” RAM,我将分配 200MB 给这个进程...”这两者都没有说明您的应用程序、.net 框架或其他任何内容。 (3认同)