2011-02-23 81 views
3

我有一个Silverlight 4应用程序,它有一个泄漏的ViewModel类。我通过在我的ViewModel类型上使用WinDbg和!gcroot命令来确认这一点。我无法准确地找到内存泄漏的确切原因,但试图通过在相应的视图下面一行代码来解决它,当它被关闭:Silverlight 4内存泄漏

HtmlPage.Window.Navigate(new Uri(MyTopLevelUri)); 

这迫使应用程序重新启动,因此RootVisual被重新初始化。现在,当我使用WinDbg时,我可以看到View关闭后没有更多的引用保留在ViewModel类中。

但是,当我监视应用程序的内存使用(使用SysInternals)时,它不断增加。有时它可能会略微下降,但如果我继续打开和关闭嫌疑人视图,我最终会得到超过1,000,000K的专用字节内存集。另外,即使我添加强制GC的代码,它也不会真正恢复分配的所有内存。我应该担心吗?

SL4和控件是否存在固有内存泄漏?我没有太多的信心,因为最近发布的补丁修复了DataTemplates(版本4.0.60129.0 http://timheuer.com/blog/)的内存泄漏。

+0

对不起,它让你难过。杰夫,我已经将它删除了。 –

+0

刚刚在这里发现了一些非常有趣的东西:http://blogs.msdn.com/b/slperf/archive/2010/08/19/analyzing-silverlight-memory-usage-part-1-obtaining-measurements.aspx –

+0

好的已经把它钉在一个特定的约束上。我们正在使用DataContextProxy模式(如下所述:http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in -nested-controls.aspx)。一旦我删除使用DataContextProxy静态资源的所有绑定,内存泄漏就会消失。我不知道为什么这会导致内存泄漏。 –

回答