我刚刚用ANTS Memory Profiler调查了一些Silverlight控件(太棒了!),发现我的一些控件都留在了内存中。解决方法是在控件“卸载”时清除模板和内容值为null,并清除我在代码中完成的任何绑定。
这是处理Silverlight自定义控件的正常模式吗?我过去没有做到这一点吗?
有没有人知道一个范例,例如:用整洁的清理来编写Silverlight控件的模式?
附录我一直在进一步研究这个问题,发现当DataContext设置为null时,将删除对DataContext的绑定。似乎正确的过程是在Loaded事件中设置任何Datacontext值,并在Unloaded事件中将其设置为null。我编写Silverlight Templated控件的范例仍然存在根本问题,因为我无法强制销毁ContentControls(请参阅我的问题:Why are Silverlight ContentControls not garbage collected?)。
答案 0 :(得分:2)
http://timheuer.com/blog/archive/2011/02/14/silverlight-february-2011-update-gdr3.aspx
答案 1 :(得分:1)
你知道泄漏的地方吗?它是在您的MS代码中还是在MS代码中?
这是关于SL中泄漏检测的好帖子:http://dotnetspeak.com/index.php/2010/09/using-windbg-to-find-memory-leaks-in-silverlight-applications/
答案 2 :(得分:0)
我的问题似乎与我想要重新加载控件有关。我在这里再次详细询问了这个问题:Should Silverlight Controls be re-loaded onto pages?