我是尝试在Visual Studio中优化内存使用的新手。我的C#.NET自动化应用程序的内存使用量迅速增加,我想防止这种情况的发生。第一次启动时,我已经拍摄了一个堆快照,然后在内存变高时又进行了一次快照。但是我真的不知道该如何处理这些差异。
[我特别关心的是COMExceptions
和ElementNotAvailableExceptions
。我了解这些异常是什么,但我不明白为什么我的RAM中有这么多的异常或如何减少该数量。每个ElementNotAvailableExceptions
都被捕获在各自的函数中,因此在函数完成后应立即将其从内存中删除,对吗?我不会将它们保存到静态变量或类似的疯狂内容中。我当然也不会保存COMExceptions
。为什么这些东西会在堆快照中占用这么多内存?
而且,ConcurrentStack + Node <Object>
是什么?我从来没有在代码中使用术语ConcurrentStack
,并且在扩展它时也看不到任何内容。那我要如何处理这么多的内存呢?
编辑:以下是为Paths to root
显示的ElementNotAvailableExceptions
,它似乎无助于告诉我任何有价值的内容。
虽然我从来没有弄清楚为什么ElementNotAvailableException
会留在RAM中(当它封装在一个函数中时,垃圾回收会定期运行,并且我不是故意将它们保存到静态变量中),但我确实摆脱了通过确保每个AutomationElement
在尝试获取其子级或兄弟级之类之前都不为空,来解决RAM问题(而不是像我之前那样尝试捕获这些异常,然后继续执行我的代码)。
if (myAutomationElement != null)
{
AutomationElement parent = walker.GetParent(myAutomationElement);
}