我有一个面板代表一些复杂的对象,基本上这只是一个ListBox
水平StackPanel
的。这些面板有一些内部点击处理程序,绑定等。还有一个“刷新”按钮,删除所有这些面板并创建新的面板。现在当有大约50个内部StackPanel
时,这个按钮被点击大约20次,我的应用程序变得非常缓慢且无响应,每次下一次点击只会让事情变得更糟。我能够发现所有那些内部面板仍然在记忆中。我尝试分离所有可能的处理程序并删除绑定。但无论我做什么,仍有内存泄漏。所以问题是:是否实际上有一种方法可以显式释放System.Windows.Controls.Control
所消耗的内存或任何可以保证正确内存处理的模式?顺便说一句,我对WPF只有相同的项目,没有什么是错的,泄漏只发生在Silverlight
答案 0 :(得分:0)
您无法直接管理内存,但您可以小心参考和清理内容。
一些提示:您可以尝试使用Silverlight中提供的弱引用类:http://msdn.microsoft.com/en-us/library/system.weakreference(v=vs.95).aspx
其次,问题很可能是您没有清理事件处理程序。当你完成每一个时,你需要特别推荐它们。如果不这样做,GC将无法收集它们。
第三:尝试使用Caliburn.Micro来帮助你绑定而不使用我被告知可能导致内存泄漏的事件。他对这些内存泄漏问题有一些聪明的解决方法,因此您根本不必使用事件。
格雷格