0

我們正在將實現IHttpAsyncHandler的ashx視頻流式傳輸到我們的Silverlight客戶端。Internet Explorer 9 Silverlight 4內存泄漏

在客戶端,異步處理程序正在使用MediaStreamSource的實現。

這一切都運行在最新的火狐,Chrome和罰款也Internet Explorer 8中

但在Internet Explorer 9中,我們看到了內存泄漏。我一直在使用umdh來調試內存,並找到了一個在內存之間使用127mb的調用堆棧。所以我認爲我已經縮小到這個調用堆棧。

但現在我不知道現在繼續我的調試。這裏是UMDH信息:

首先第一運轉和第二

+ 117440512 (134217712 - 16777200)  1 allocs BackTrace121282BC 
+  0 (  1 -  1) BackTrace121282BC allocations 

ntdll!RtlAllocateHeap+00000274 
npctrl!???+00000000 : 56FE1A65 
npctrl!DllCanUnloadNow+000157F0 
npctrl!???+00000000 : 56FF477E 
npctrl!???+00000000 : 56FF48D5 
urlmon!CBSCHolder::OnDataAvailable+0000003A 
urlmon!CBinding::CallOnDataAvailable+0000002B 
urlmon!CBinding::OnDataNotification+000000D7 
urlmon!CBinding::OnTransNotification+000001DB 
urlmon!CBinding::ReportData+00000085 
urlmon!COInetProt::ReportData+0000006E 
mscorie!CorFltr::ReportData+0000002B 
urlmon!CTransaction::DispatchReport+0000037A 
urlmon!CTransaction::OnINetCallback+000000DB 
urlmon!TransactionWndProc+00000028 
USER32!InternalCallWinProc+00000023 
USER32!UserCallWinProcCheckWow+00000109 
USER32!DispatchMessageWorker+000003BC 
USER32!DispatchMessageW+0000000F 
IEFRAME!CTabWindow::_TabWindowThreadProc+00000722 
IEFRAME!LCIETab_ThreadProc+00000317 
iertutil!CIsoScope::RegisterThread+000000AB 
IEFRAME!Detour_DefWindowProcA+0000006C 
kernel32!BaseThreadInitThunk+0000000E 
ntdll!__RtlUserThreadStart+00000070 
ntdll!_RtlUserThreadStart+0000001B 

第二次運行調用堆棧之間比較

+ 7fffff0 (7fffff0 -  0)  1 allocs BackTrace121282BC 
+  1 ( 1 -  0) BackTrace121282BC allocations 

ntdll!RtlAllocateHeap+00000274 
npctrl!???+00000000 : 56FE1A65 
npctrl!DllCanUnloadNow+000157F0 
npctrl!???+00000000 : 56FF477E 
npctrl!???+00000000 : 56FF48D5 
urlmon!CBSCHolder::OnDataAvailable+0000003A 
urlmon!CBinding::CallOnDataAvailable+0000002B 
urlmon!CBinding::OnDataNotification+000000D7 
urlmon!CBinding::OnTransNotification+000001DB 
urlmon!CBinding::ReportData+00000085 
urlmon!COInetProt::ReportData+0000006E 
mscorie!CorFltr::ReportData+0000002B 
urlmon!CTransaction::DispatchReport+0000037A 
urlmon!CTransaction::OnINetCallback+000000DB 
urlmon!TransactionWndProc+00000028 
USER32!InternalCallWinProc+00000023 
USER32!UserCallWinProcCheckWow+00000109 
USER32!DispatchMessageWorker+000003BC 
USER32!DispatchMessageW+0000000F 
IEFRAME!CTabWindow::_TabWindowThreadProc+00000722 
IEFRAME!LCIETab_ThreadProc+00000317 
iertutil!CIsoScope::RegisterThread+000000AB 
IEFRAME!Detour_DefWindowProcA+0000006C 
kernel32!BaseThreadInitThunk+0000000E 
ntdll!__RtlUserThreadStart+00000070 
ntdll!_RtlUserThreadStart+0000001B 
+0

我懷疑UMDH是分析CLR內存泄漏是非常有用的。由於.NET自己管理內存,CLR將不會盡可能少地分配內存。相反,它會立即削減大量內存,以便優化性能,碎片化等。我將從.NET特定的工具開始,比如ANTS Memory Profiler,以確定哪些內存泄漏:託管或非託管。你應該記得在拍攝快照之前先做一個強制GC,否則你可能會在堆中觀察到很多鬼物體。 – 2012-01-30 17:44:03

回答