闽公网安备 35020302035485号

static void Main(string[] args)
{
Console.WriteLine("hello world!");
Console.ReadLine();
}
将程序跑起来后用 windbg 附加,使用 !address -summary 将计算出的内存和 Process Explorer 工具显示的 Virtual Size 进行对比,截图如下:
.物理文件 MappedFile

Workding Set = WS Private + WS Shareable最后我们还是用 Explorer 观察下刚才的 C# 程序,截图如下:


Private Bytes = WS Private + Pages Out (pagefile)上面的 Pages Out 是我定义的换页内存,这个 Private Bytes 指标在分析内存泄露的场景下特别有用,它能够准备的洞察当前程序是否存在大量的 Pages Out(换页内存)。为了方便演示出现了大量的换页内存,写一个不断灌数据的例子。
internal class Program
{
static void Main(string[] args)
{
var list = new List<string>();
for (int i = 0; i < 100000000; i++)
{
list.Add(string.Join(",", Enumerable.Range(0, 100000)));
if (i % 10000 == 0) { Console.WriteLine($"i={i}"); }
}
Console.WriteLine("成功!");
Console.ReadLine();
}
}
将程序跑起来后,截图如下:
C:\Users\Administrator>wmic pagefile get /value # 堆代码 duidaima.com AllocatedBaseSize=49464 Caption=C:\pagefile.sys CurrentUsage=1473 Description=C:\pagefile.sys InstallDate=20230807095038.481750+480 Name=C:\pagefile.sys PeakUsage=1640 Status= TempPageFile=FALSE不过可以看到,这个 pagefile.sys 已经从刚开始的 4.8G 暴涨到 49G 了,其中一大半都被我的程序吞掉了。

