UIAutomation Memory Issue

У меня есть простая программа WPF, в которой есть только одна кнопка без логики обработки событий. Затем я использую платформу UIAutomation, чтобы нажимать эту кнопку много раз подряд. Наконец, я смотрю на память, используемую программой WPF, и она, кажется, растет и растет.

Кто-нибудь знает, почему это так и как я могу предотвратить это?

Вот простая программа WPF (в коде ничего нет):


    
        Click Me
    

Вот тестовая программа UIAutomation:

class Program
{
    static void Main(string[] args)
    {
        string appPath = @"..\..\..\SimpleApplication\bin\Debug\SimpleApplication.exe";
        string winAutoId = "Simple Application";
        string buttonAutoId = "button";

        using (Process process = Process.Start(new ProcessStartInfo(appPath)))
        {
            Thread.Sleep(TimeSpan.FromSeconds(1));

            AutomationElement winElement = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, winAutoId));

            for (int i = 0; i < 1001; i++)
            {
                AutomationElement buttonElement = winElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, buttonAutoId));

                InvokePattern invokePattern = (InvokePattern)buttonElement.GetCurrentPattern(InvokePattern.Pattern);
                invokePattern.Invoke();

                process.Refresh();
                long totalMemory = process.WorkingSet64 + process.PagedMemorySize64;

                if (i % 100 == 0)
                {
                    Console.WriteLine("Memory = {0} MB", ((double)totalMemory) / (1024 * 1024));
                }
            }

            WindowPattern windowPattern = (WindowPattern)winElement.GetCurrentPattern(WindowPattern.Pattern);
            windowPattern.Close();
        }

        Console.WriteLine();
        Console.WriteLine("Press Enter to Continue...");
        Console.ReadLine();
    }
}

Вот результаты из программы на моей машине:

Memory = 38.20703125 MB
Memory = 42.9296875 MB
Memory = 45.00390625 MB
Memory = 47.04296875 MB
Memory = 51.9296875 MB
Memory = 52.2890625 MB
Memory = 52.41015625 MB
Memory = 55.70703125 MB
Memory = 55.70703125 MB
Memory = 57.21484375 MB
Memory = 59.09375 MB

Глядя на это с помощью .NET Memory Profiler, новые объекты, которые появляются в приложении WPF, взяты из пространства имен System.Threading. Когда я сам запускаю программу WPF и щелкаю мышью по кнопке, эти объекты не появляются.

ОБНОВИТЬ:

Я пытался сделать аналогичный тест с использованием Visual Studio 's CodedUI, и те же 8 объектов, по-видимому, также протекали в этой ситуации. Объекты, которые кажутся протекающими:

System.Threading.CancellationTokenSource
System.Threading.TimerQueueTimer
System.Threading.SparselyPopulatedArray[]
System.Threading.Timer
System.Threading.TimerHolder
System.Threading.SparselyPopulatedArray
System.Threading.SparselyPopulatedArrayFragment
System.Threading.CancellationCallbackInfo[]

Я также отправил сообщение об ошибке в Microsoft:

http://connect.microsoft.com/VisualStudio/feedback/details/801209/uiautomation-memory-issue

Ответы на вопрос(2)

Ваш ответ на вопрос