我试图使用Visual Studio来跟踪我的应用程序中的内存使用情况.在"诊断工具"窗口中,它显示我的应用程序使用的是423 MB.谢谢我转到'内存使用'和'ViewHeap',当我点击快照时,我得到一个表格,其中包含我的对象大小.

但当我添加这些数字时:= 3317228 + 403764 + 354832 + 264984 + 244836 + 195748 + 144032 + 28840 + 16452 + 13920 + 13888 + 3428 + 2100 + 20 = 5004072 = 4.77 MB
我的问题是为什么这个数字4.77MB与我在"记忆"图表中看到的423MB不匹配.我希望左边的表格可以看到423 MB的位置.请告诉我,我错过了什么?
410*_*one 34
这有很多潜在的原因,包括JITter,Debug Tools,Debug Symbols,Just My Code,Garbage Collection等.我们将通过两个大的.
Visual Studio 的Just My Code功能倾向于隐藏未从.PDB文件或打开的项目加载的用户的分配,异常,断点和任何其他非代码元数据.有关详细信息,请参阅MSDN Just My Code.
在Visual Studio中调试任何项目时,Visual Studio调试器会运行并分配额外的内存以允许断点,异常捕获和其他功能.对于一个真正的诊断工具捕获,您应该使用Alt+F2选项,或调试>不调试启动诊断工具....您还需要切换到此部分的发布模式.单单这一步从削减存储器中的图表显示(我)21.5MiB到5.5MiB,表明调试符号和调试工具是一个相当大的因素.请记住,为了使Visual Studio能够捕获异常,断点和其他数据,它必须将自身附加到您的进程以及进程中的所有对象.
你真的不应该担心数字匹配.Memory Graph和View Heap图表的目的是让您看到尖峰和奇数内存波动,这可能表明程序不正确.您应该寻找那些,而不是关注两个值之间的差异.
也就是说,您可以采取一些步骤来获得准确的结果.
如果你真的想要匹配它们,我认为它不能以你想要的方式完成.但是,你可以走近一点.第一步是启动无需调试的诊断工具...,然后选择内存使用情况.选择后,单击旁边的Settings Gear,并确保Profiler Type为Mixed (Managed and Native).然后,单击" 开始"并拍摄一些快照,以便检查内存使用情况.完成后,停止调试并检查内存.
要检查内存,请在快照框中单击要检查的快照的左上角蓝色数字.在这个页面上,单击网格图标的右上角,然后取消选择仅我的代码和关闭小物件.切换到Native Heap选项卡并执行相同操作,取消选择Just My Code,然后选择Include Freed Allocations.
您应该发现仅此一点就会使您的错误更接近实际值.(实际值作为专用字节和误差是所述堆大小)对于I测试了它的应用,它的总(来自两个堆)达到约1.0265MiB,这是大约为分配相同的所指示的任务管理器,当我在Visual Studio之外运行程序(这个实际值是1.1211MiB,但是数字很小,预计会出现误差范围).
什么是包括弗里德分配呢?实质上,当GC清除内存时,该内存不会立即从应用程序的空间中删除.相反,它被释放以供其他对象使用,但仍可以保留在应用程序中.垃圾收集是一个复杂的主题,超出了这个问题和答案的范围.
内存分配,使用和测量是一个非常复杂的主题.不幸的是,没有很多100%简单的方法来处理这样的情况,并且通常解决方案越简单和准确,它就越复杂,缓慢和难以使用.
MSDN Just My Code:https://msdn.microsoft.com/en-us/library/dn457346.aspx#BKMK__NET_Framework_Just_My_Code
MSDN垃圾收集:https://msdn.microsoft.com/en-us/library/0xy59wtx%28v=vs.110%29.aspx
本答案的其余部分基于我自己的实验和反复试验,并且可能会因不同环境而导致潜在的不准确性.此处介绍的步骤可能不适用于所有开发人员,并且使用Visual Studio 2015 RC版本14.0.22823.1 D14REL执行.
| 归档时间: |
|
| 查看次数: |
9263 次 |
| 最近记录: |