Утечка памяти при использовании UI Automation в Windows 10 - PullRequest
1 голос
/ 04 августа 2020

У меня утечка памяти на машине Windows 10, и после исследования некоторого дампа, взятого из процесса, вызывающего проблему (приложение WPF), я обнаружил много экземпляров «MS.Internal.Automation.SynchronizedInputProviderWrapper» и В основном этот тип ссылается на большинство объектов, хранящихся в памяти, а не на сборщик мусора.

Я использовал dotMemory (путь хранения ключей экземпляров), Visual Studio 2019 (для сравнения дампов) и WinDbg для дальнейшего исследования.

enter image description here enter image description here enter image description here

According to this stackoverflow answer: Проблема с памятью UIAutomation

Это накопительный пакет, исправляющий проблему на сервере Win 8 RT и windows 2012: https://support.microsoft.com/en-us/help/2885482/memory-leak-when-using-ui-automation-in-windows-8

И согласно Microsoft: см. Эту ссылку

Когда несколько приложений, использующих среду автоматизации пользовательского интерфейса, работают одновременно на компьютере на базе Windows 8 происходит утечка памяти и высокая загрузка ЦП.

И я думаю, что это может быть та же проблема на Windows 10 als o но не могу найти исправление или накопительный пакет, устраняющий эту проблему.

Обновление:

Я провел еще один анализ с помощью SuperDump и нашел возможное объяснение утечки памяти, но я не могу интерпретировать стек вызовов:

clr!EEHeapAlloc+2c   ntdll!RtlAllocateHeap 
clr!EEHeapAllocInProcessHeap+5b   clr!EEHeapAlloc 
clr!ClrAllocInProcessHeap+23    
clr!operator new+14   clr!ClrAllocInProcessHeap 
clr!ComCallWrapper::CreateWrapper+1ce   clr!operator new 
clr!ComCallWrapper::InlineGetWrapper+24   clr!ComCallWrapper::CreateWrapper 
clr!GetComIPFromObjectRef+22e   clr!ComCallWrapper::InlineGetWrapper 
clr!MarshalObjectToInterface+3a   clr!GetComIPFromObjectRef 
clr!StubHelpers::InterfaceMarshaler__ConvertToNative+d8   clr!MarshalObjectToInterface 
0x4AA1110   clr!StubHelpers::InterfaceMarshaler__ConvertToNative 
PresentationCore_ni!System.Windows.Media.DashStyle.OffsetPropertyChanged(System.Windows.DependencyObject, System.Windows.DependencyPropertyChangedEventArgs)$##6001EA6 <PERF> (PresentationCore_ni+0x19cca0)    
clr!COMToCLRDispatchHelper+6b    
clr!COMPlusFrameHandlerRevCom    
UIAutomationCore!RichEditObjectProxy::QueryInterface+6139    
UIAutomationCore!NullInvoker::CallTarget    
UIAutomationCore!InProcClientAPIStub::UiaNode_GetPatternProvider    
UIAutomationCore!RichEditObjectProxy::QueryInterface+6116    
UIAutomationCore!InProcClientAPIStub::InvokeInProcAPI+5eb    
UIAutomationCore!UiaNode::CrossProcess_GetPatternProvider+49   UIAutomationCore!InProcClientAPIStub::InvokeInProcAPI 
UIAutomationCore!RemoteUiaNodeStub::Incoming_GetPatternProvider+8c   UIAutomationCore!UiaNode::CrossProcess_GetPatternProvider 
UIAutomationCore!RemoteUiaNodeStub::OnMessage+b8    
UIAutomationCore!InvokeOnCorrectContext_Callback+272    
UIAutomationCore!NullInvoker::CallTarget+2b   UIAutomationCore!InvokeOnCorrectContext_Callback 
UIAutomationCore!ProcessIncomingRequest+4f6    
UIAutomationCore!ChannelBasedServerConnection::OnData+dd    
UIAutomationCore!ReadWriteChannelInfo::Service+18a   UIAutomationCore!ChannelBasedServerConnection::OnData 
UIAutomationCore!OverlappedIOManager::IoThreadProc+b3   UIAutomationCore!ReadWriteChannelInfo::Service 
UIAutomationCore!OverlappedIOManager::StaticIoThreadProc+d   UIAutomationCore!OverlappedIOManager::IoThreadProc 
kernel32!BaseThreadInitThunk+19    
ntdll!__RtlUserThreadStart+2f    
ntdll!_except_handler4    
ntdll!FinalExceptionHandlerPad22    
UIAutomationCore!OverlappedIOManager::StaticIoThreadProc 

Спасибо

...