闽公网安备 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 了,其中一大半都被我的程序吞掉了。

