如何编写不泄漏内存的Silverlight控件

时间:2010-11-25 16:27:44

标签: silverlight silverlight-4.0

我刚刚用ANTS Memory Profiler调查了一些Silverlight控件(太棒了!),发现我的一些控件都留在了内存中。解决方法是在控件“卸载”时清除模板和内容值为null,并清除我在代码中完成的任何绑定。

这是处理Silverlight自定义控件的正常模式吗?我过去没有做到这一点吗?

有没有人知道一个范例,例如:用整洁的清理来编写Silverlight控件的模式?

附录我一直在进一步研究这个问题,发现当DataContext设置为null时,将删除对DataContext的绑定。似乎正确的过程是在Loaded事件中设置任何Datacontext值,并在Unloaded事件中将其设置为null。我编写Silverlight Templated控件的范例仍然存在根本问题,因为我无法强制销毁ContentControls(请参阅我的问题:Why are Silverlight ContentControls not garbage collected?)。

3 个答案:

答案 0 :(得分:2)

MS已发布包含内存泄漏修复功能的Silverlight 4 GDR3 我不确定这是否能解决您的问题,但值得下载最新的SL版本并再次测试。

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?