我使用C#编写了一个Hello-world控制台应用程序。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
Console.Read();
}
},当我启动它时,它所占用的记忆是:

然后,我尝试创建这个进程的转储文件:

在创建转储之后,该进程占用的内存如下:

你可以看到工作装置尺寸发生了很大的变化,这对我来说是个惊喜。
关于这个内存增量的其他有趣之处是:
下面是我的问题:
1.为什么在创建转储操作的同时还会增加内存?
2.在过去,当测试人员报告内存泄漏问题并向我发送转储文件时,我将转储文件大小视为目标进程在实验室环境中的内存大小。但从上面这个简单的例子来看,我似乎总是错了?
3.我对46 MB转储文件中的内容非常好奇(换句话说,我非常好奇当前hello world应用程序为什么占用了46 MB内存)。我熟悉SOS命令,如!DumpHeap或!ee堆,但这些命令不足以告诉46 am大小文件中的所有内容。有人能分享一些有用的工具、链接或说明吗?
非常感谢您的帮助!
发布于 2014-09-19 19:51:25
在95%的情况下(或者更多的情况下,我没有关于它的统计数据),您不必担心工作集。Microsoft选择工作集列作为任务管理器的默认列是一种误导。
应用程序需要的内存称为虚拟内存。您可以区分三种不同类型的虚拟内存:
Windows减少或增加工作集的原因有很多。在许多情况下,原因可以在其他应用中找到,而不是你的。但是,在您描述的情况下,很明显:
然而,它仍然取决于您在创建转储时对您的PC所做的其他事情。尝试运行多线程应用程序,在转储进程时大量使用内存。您可能会发现Windows考虑到了这种情况,在内存分页之前,它会分页删除您自己进程的内存。在这种情况下,工作集将不会像在屏幕截图中增加的那么多。
所以,再说一遍:不要担心工作环境。Windows只是认为它有足够的RAM来加快转储创建过程。很可能是因为它使用了未使用的内存,或者减少了用于磁盘缓存的RAM数量。
如果您想查看内存内容,请尝试SysInternals RAMMap。在不同的情况下重复转储创建,例如在复制文件或做大量计算时。
https://stackoverflow.com/questions/25931385
复制相似问题