我们正在将实现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
我怀疑UMDH是分析CLR内存泄漏是非常有用的。由于.NET自己管理内存,CLR将不会尽可能少地分配内存。相反,它会立即削减大量内存,以便优化性能,碎片化等。我将从.NET特定的工具开始,比如ANTS Memory Profiler,以确定哪些内存泄漏:托管或非托管。你应该记得在拍摄快照之前先做一个强制GC,否则你可能会在堆中观察到很多鬼物体。 – 2012-01-30 17:44:03