我的Windows应用程序真正使用多少内存?
我有一个实验性程序的长期运行内存,我想知道它是实际的内存占用情况。 任务管理器说(在windows7-64中)应用程序消耗800MB内存,但根据任务管理器分配的总内存量为3.7GB。 所有分配的内存总和不等于3.7GB。 我怎样才能确定我的应用程序实际在使用多少内存?
推论:任务管理器实际报告的内存是什么? 它似乎并不是分配给应用程序本身的全部内存。
据我所知,任务管理器显示工作集;
工作集:工作线程最近触及的一组内存页面。 如果计算机中的可用内存超过阈值,即使未使用页面,页面也会留在进程的工作集中。 当空闲内存低于阈值时,页面将从工作集中删除。
通过http://msdn.microsoft.com/en-us/library/cc432779(PROT.10).aspx
您也可以让任务管理器显示虚拟内存。
我通常使用perfmon(开始 - >运行... - > perfmon)来跟踪内存使用情况,使用Private Bytes计数器。 它反映了你的正常分配器分配的内存(new / HeapAlloc / malloc等)。
记忆是一个棘手的事情来衡量。 应用程序可能会保留大量的虚拟内存,但实际上并未使用其中的大部分。 一些内存可能是共享的; 也就是说,一个共享的DLL可能会被加载到多个应用程序的地址空间中,但它只会被加载到物理内存中一次。
一个好的方法是工作集,它是最近访问过的虚拟地址空间中的一组页面。 “最近访问”的含义取决于操作系统及其页面替换算法。 换句话说,它是映射到物理内存并且正在使用的实际虚拟页面集合。 这是任务管理器向您显示的内容。
虚拟内存使用量是已经保留的虚拟页面的数量(请注意,并非所有这些实际上都会被提交,也就是说,物理后台存储已经被分配了,您可以通过点击将其添加到任务管理器中的显示器上查看 - >选择列。
但最重要的是 :如果你想实际测量你的程序使用多少内存来查看是否需要优化其中的一部分空间或者选择更好的数据结构或者将某些东西保存到磁盘上,那么使用任务管理器是错误的做法。 你应该几乎肯定会使用一个分析器。
这取决于你在说什么内存。 不幸的是,有很多不同的方法来测量内存。 例如 ...
你对哪个指标感兴趣?
我认为大多数人倾向于对“虚拟内存分配”类别感兴趣。
链接地址: http://www.djcxy.com/p/42909.html