我正在使用ANTS分析器在我的应用程序中分析内存usgae,它显示Excell单元对象在第2代中保留了大量内存。应用程序使用EPPlus库生成excel文件。
我附上了该工具生成的一些图表。 我不确定如何进一步钻取以确定哪个对象正在保持参考&吃起记忆。请提供有关如何深入钻取图表的建议。
问题是:此图表再次指向同一个对象。我想我没有正确使用这个工具。
谢谢
答案 0 :(得分:0)
首先,只有你作为开发人员才知道那些Excell对象是否应该在内存中(例如,外部观察者如何知道这些是否是缓存对象)?您可以提供有关是否已在这些对象上调用Dispose的信息。
其次 - 你看到它给你一个大对象爆裂的警告吗?我先调查一下。
答案 1 :(得分:0)
查看您拍摄的两个快照(摘要屏幕)我缺少每个快照的工作流程上下文,所以我将做一些假设:
快照1:在您创建Excel文件之前。 快照2:在您创建Excel文件后,您认为此操作已完成。
首先,我建议您稍微调整工作流程并执行以下快照。
快照1:在创建Excel文件之前拍摄。
快照2/3:取决于应用程序工作流程;如果你创建数据(可以查看它等),那么在事后从这个数据创建一个文件,然后在数据生成后拍摄一个快照,然后在文件创建后拍摄另一个。
最终快照:拍摄一张最终快照 - 这是一个很好的做法,可以更好地了解完成工作流后的内存,因为它可以清除终结队列。
这里没有答案,因为很难从一些屏幕截图中做到这一点 - 只是建议 - 我不了解你的应用程序,并假设你想要的内存使用情况,如缓存数据等。
(a)使用选择了“分类参考”的“实例分类器”视图,您需要从顶部(仅)参考链开始,从右向左工作。再次做出假设(简单的假设)超出了作为Excel库一部分的节点,并查看引用它的类。 在这一点上,这将使你足够在代码(b)中寻找该引用,或者开始指向更深入的探索(c)。 (a)如果您认为此参考链(从右到左的路径)不值得追求,那么请转到下一个。使用Instance Categorizor视图,您可以使用Right-Left,Top-Botton。
(b)如果您有源代码,则可以在节点上单击并浏览到Visual Studio中的类。或者自己去那里:>
(c)通过从(a)深入探索参考链,我的意思是使用“在此路径上显示实例”链接,然后根据显示的度量(大小,与GC根的距离)进行判断,选择一个实例该课程将更详细地探讨。这将带您进入Instance Retention Graph,它会更详细地显示该实例的参考链。注意这里的工具提示,彩色区域和节点类型都意味着各种各样的事情。请参阅下面的链接。
我认为从这个答案中可以清楚地看到,你可能会从查看AMP文档中获益,因为我需要学习很多东西,而且我只是在你的应用程序中进行了非常高水平的演练,而且我做了很多(远远不是很多假设。
请参阅链接以获得一些帮助:
Large object heap fragmentation tips< - 正如其他海报所指出的那样。
Red Gate's learning portal for the Memory profiler< - 或许请查看视频和技术论文部分
我希望能让你开始。