我在一个需要大量内存的 32 位最终用户应用程序上工作。高达数 GB。我最近将我们的内部内存分配策略切换为使用受Raymond Chen 这篇文章启发的无文件的内存映射文件。它工作得很好。
唯一的缺点是:如果我以这种方式分配 1 GB 的内存,它不会显示在性能计数器的任何位置。当然,我确实知道分配了多少,有多少映射到我的地址空间,但我不知道它是如何在物理内存和页面文件上划分的。我想知道,如果不是出于任何其他原因,除了记录它以进行调试。
我在一个需要大量内存的 32 位最终用户应用程序上工作。高达数 GB。我最近将我们的内部内存分配策略切换为使用受Raymond Chen 这篇文章启发的无文件的内存映射文件。它工作得很好。
唯一的缺点是:如果我以这种方式分配 1 GB 的内存,它不会显示在性能计数器的任何位置。当然,我确实知道分配了多少,有多少映射到我的地址空间,但我不知道它是如何在物理内存和页面文件上划分的。我想知道,如果不是出于任何其他原因,除了记录它以进行调试。
解决方案是使用sysinternals 的 VMMap监视我的应用程序。这会按分配类型(我的内存映射文件称为“共享”)以及状态(在内存中或换出)分解应用程序的内存使用情况。
甚至还有一个图形内存碎片图!
调用QueryWorkingSet并计算映射范围内的页数,以确定有多少内存是工作集的一部分。但请记住,页面可以从工作集中排除,但仍然在某处的物理内存中。