我有一个Silverlight 4应用程序,它有一个泄漏的ViewModel类。我已经通过在我的ViewModel类型上使用WinDbg和!gcroot命令来确认这一点。我无法确定内存泄漏的确切原因,但尝试通过在关闭时使用相应视图中的以下代码行来解决它:
HtmlPage.Window.Navigate(new Uri(MyTopLevelUri));
这会强制应用重启,因此RootVisual会重新初始化。现在,当我使用WinDbg时,我可以看到在View关闭后没有更多引用保留在ViewModel类上。
但是,当我监视应用程序的内存使用情况(使用SysInternals)时,它会不断增加。有时它可能会略有下降,但如果我继续打开和关闭嫌疑人View我最终会得到一个超过1,000,000K的私有字节内存集。此外,即使我添加代码来强制GC,它也永远不会真正恢复分配的所有内存。我应该担心吗?
SL4和控件是否存在内在的内存泄漏?鉴于最近发布的用于修复DataTemplates(版本4.0.60129.0 http://timheuer.com/blog/)内存泄漏的补丁,我没有太多信心。
答案 0 :(得分:1)
看来我原来问题的答案(SL4固有的内存泄漏?)确实是的!
http://forums.silverlight.net/forums/t/211504.aspx
上面链接中描述的两个泄漏显然已在SL5中修复。