我在WPF应用程序中看到内存泄漏。在使用.NET Memory Profiler时,我可以看到,即使在关闭窗口之后,由于Dispatcher队列中的DispatcherOperations中的Action委托,但是DataContext和UI元素都在附近......但是具有ContextIdle优先级并且似乎永远不会得到处理。
我可以在Window关闭时强制Dispatcher队列刷新吗?
答案 0 :(得分:0)
您可以尝试在Window.Closing事件中使用具有优先级ContextIdle的dispatcher.Invoke包含对伪方法的同步调用。这应该会阻止UI线程生成更多的调度程序项,并且只应在处理完最后一个ContextIdle项后返回。但是,我无法验证是否因为没有Telerik组件,所以在窗口关闭之前会处理ContextIdle项目。
我还可以想象那些项目在循环中运行,即在执行期间重新创建。在这种情况下,在关闭窗口之前将DataContext显式设置为null可能会有所帮助。这可能会向组件发出信号,表明它们可以停止循环,至少你不会以这种方式泄漏datacontext对象的实例。