1

任何时候挂钩 UI 自动化焦点更改事件时,Internet Explorer 都会在每次页面加载时泄漏内存。这只发生在 Server 2019 上,这对于我运行瘦客户端的客户来说是一个严重的问题。

环境:

Windows Server 2019 标准版 V 10.0.17763 内部版本 17763

Internet Explorer 11 版本 11.678.17763.0 更新版本 11.0.140 (KB4511872)

要复制:

  1. 将附加的代码放入几个类文件并编译为控制台应用程序。
  2. 在 Windows Server 2019 机器上运行该应用程序。
  3. 启动 Internet Explorer 和任务管理器。
  4. 反复加载一个网页,每次都看内存增加。

我有两个与这个问题有关的问题。

  1. 这个问题有什么已知的解决方案吗?
  2. 是否有 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
        }

    }
}

预计不会有任何内存泄漏。

4

0 回答 0