任何时候挂钩 UI 自动化焦点更改事件时,Internet Explorer 都会在每次页面加载时泄漏内存。这只发生在 Server 2019 上,这对于我运行瘦客户端的客户来说是一个严重的问题。
环境:
Windows Server 2019 标准版 V 10.0.17763 内部版本 17763
Internet Explorer 11 版本 11.678.17763.0 更新版本 11.0.140 (KB4511872)
要复制:
- 将附加的代码放入几个类文件并编译为控制台应用程序。
- 在 Windows Server 2019 机器上运行该应用程序。
- 启动 Internet Explorer 和任务管理器。
- 反复加载一个网页,每次都看内存增加。
我有两个与这个问题有关的问题。
- 这个问题有什么已知的解决方案吗?
- 是否有 UI 自动化框架的替代方法可以用来检测系统焦点更改事件?
我已经尝试将 CacheRequest 添加到组合中,但是无论数据是如何收集或处理的,只要这个事件被挂钩,问题似乎就会发生。
using System;
namespace UIAMemoryLeak
{
class Program
{
static void Main(string[] args)
{
UIAutomationWorker worker;
Console.WriteLine("Starting Watcher ...");
worker = new UIAutomationWorker();
Console.WriteLine("Subscribe Focus Change Event");
worker.SubscribeFocusChange();
Console.WriteLine("Watching ...");
Console.ReadLine();
}
}
}
using System;
using System.Windows.Automation;
namespace UIAMemoryLeak
{
class UIAutomationWorker
{
public void SubscribeFocusChange()
{
try
{
// Hook Focus Change Event
Automation.AddAutomationFocusChangedEventHandler(UIAFocusChange);
}
catch (Exception ex)
{
throw ex;
}
}
private void UIAFocusChange(Object sender, AutomationFocusChangedEventArgs e)
{
// Do Nothing
}
}
}
预计不会有任何内存泄漏。