gpt4 book ai didi

c# - 使用 AutomationElement 类时可能发生内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:23 25 4
gpt4 key购买 nike

我正在编写一个程序,将我的浏览历史记录在一个文本文件中。它从 chrome 窗口抓取 url 并将其写入文本文件。它获取 chrome 窗口句柄作为参数并将 url 写入 out 参数。代码如下所示:

static AutomationElement elm;// = AutomationElement.FromHandle(handle);
static AutomationElement elmUrlBar;
public static void GetChromeUrl(IntPtr handle, out string url)
{
string namedProperty = "Address and search bar" ;
url = null;
elm = AutomationElement.FromHandle(handle);
elmUrlBar = elm.FindFirst(TreeScope.Descendants,
new PropertyCondition(AutomationElement.NameProperty, namedProperty));
if (elmUrlBar != null)
{
AutomationPattern[] patterns = elmUrlBar.GetSupportedPatterns();
if (patterns.Length > 0)
{
ValuePattern val = (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]);
url = val.Current.Value;
}
}
}

我每隔 5 秒使用计时器回调调用此方法,它会从 chrome 浏览器窗口返回正确的 url。所以它确实运行良好,尽管它似乎没有释放 AutomationElement 对象占用的内存,并且此应用程序使用的 RAM 不断增长。我使用 dotMemory 4.0 和 ants memory profiler 8 对它进行了分析,它表明 automationElement 对象已创建但从未被垃圾收集器删除。有人知道如何解决这个问题吗?

最佳答案

我现在工作的公司也遇到过这个问题。

这篇文章里面有问题的答案UIAutomation Memory Issue

您基本上需要从您正在自动化的应用程序中调用 GC,因为自动化元素将被添加到大对象堆中,如果此时不存在指向它们的指针,则需要 3~ 分钟才能处理掉。

关于c# - 使用 AutomationElement 类时可能发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com