为什么Silverlight中有如此多的内存?
数据:
我有时会在USER INTERFACE上找到许多复选框和其他复选框。当然,我正在从视觉效果中删除复选框和其他控件,但Silverlight的内存使用量总是增加;它永远不会减少。
如何确保释放内存?
这是垃圾收集的问题吗?如何找到所有剩余对象的根 没有尚未收集的参考文献?
如果需要,我可以提供更多数据。
答案 0 :(得分:3)
逃避内存的最常见原因不是将事件处理程序与已从对象树中删除的元素分离。
经常发现的一点是,应用程序对象上的实例级别字段(包括实现事件的委托)和MainPage
(或者用作RootVisual
的任何内容)都与{一样好} {1}}字段,因为它们通常与应用程序一样长。
因此看起来很无辜: -
static
如果在没有相应的情况下从UI中删除btn.Click += btn_myClickHandler;
,则主页面代码中的会导致内存泄漏: -
btn
答案 1 :(得分:1)
Silverlight使用的内存管理引擎类似于CLR用于WPF和其他传统.NET应用程序的内存管理引擎。它基于垃圾收集,如果你保持对对象的引用,甚至意外地阻止它们被垃圾收集,那么内存消耗将继续增加。
如果您在Silverlight应用程序中遇到此问题,可以查看是否存在泄漏,或者您可以尝试使用工具查找泄漏并查找大部分内存的分配位置。可能最快的方法是使用内存分析器。不幸的是,没有很多内存分析器可以与Silverlight配合使用,但ANTS分析器有一个免费试用版,据说可以: