我该如何处理Visual Studio内存堆快照中的异常?

问题描述 投票:0回答:1

我是尝试在Visual Studio中优化内存使用的新手。我的C#.NET自动化应用程序的内存使用量迅速增加,我想防止这种情况的发生。第一次启动时,我已经拍摄了一个堆快照,然后在内存变高时又进行了一次快照。但是我真的不知道该如何处理这些差异。

[我特别关心的是COMExceptionsElementNotAvailableExceptions。我了解这些异常是什么,但我不明白为什么我的RAM中有这么多的异常或如何减少该数量。每个ElementNotAvailableExceptions都被捕获在各自的函数中,因此在函数完成后应立即将其从内存中删除,对吗?我不会将它们保存到静态变量或类似的疯狂内容中。我当然也不会保存COMExceptions。为什么这些东西会在堆快照中占用这么多内存?

而且,ConcurrentStack + Node <Object>是什么?我从来没有在代码中使用术语ConcurrentStack,并且在扩展它时也看不到任何内容。那我要如何处理这么多的内存呢?

Image of heap diff

编辑:以下是为Paths to root显示的ElementNotAvailableExceptions,它似乎无助于告诉我任何有价值的内容。

Image of Paths to root for ElementNotAvailableExceptions

c# .net visual-studio memory-management heap-memory
1个回答
0
投票

虽然我从来没有弄清楚为什么ElementNotAvailableException会留在RAM中(当它封装在一个函数中时,垃圾回收会定期运行,并且我不是故意将它们保存到静态变量中),但我确实摆脱了通过确保每个AutomationElement在尝试获取其子级或兄弟级之类之前都不为空,来解决RAM问题(而不是像我之前那样尝试捕获这些异常,然后继续执行我的代码)。

if (myAutomationElement != null)
{
    AutomationElement parent = walker.GetParent(myAutomationElement);
}
© www.soinside.com 2019 - 2024. All rights reserved.