强制处置控制

本文关键字:控制 | 更新日期: 2023-09-27 18:33:25

我有一个代表一些复杂对象的面板,基本上这只是一个带有水平StackPanelListBox。这些面板有一些内部单击处理程序、绑定等。还有一个"刷新"按钮,可以删除所有这些面板并创建新面板。现在,当有大约 50 个内部StackPanel并且单击此按钮大约 20 次时,我的应用程序变得非常缓慢且无响应,每次下一次点击只会让事情变得更糟。我能够发现所有这些内部面板仍在内存中。我尝试分离所有可能的处理程序并删除绑定。但无论我做什么,仍然有内存泄漏。所以问题是:实际上有没有一种方法可以显式释放System.Windows.Controls.Control或任何可以保证正确内存处理的模式消耗的内存?顺便说一句,我只有相同的WPF项目,没有任何问题,泄漏只发生在Silverlight中

强制处置控制

你不能直接管理内存,但你可以小心引用和清理东西。

几个提示:您可以尝试使用Silverlight中提供的弱引用类:http://msdn.microsoft.com/en-us/library/system.weakreference(v=vs.95).aspx

其次,问题很可能是您尚未清理事件处理程序。 当您完成每个时,您需要专门取消引用它们。 如果不这样做,GC将无法收集它们。

第三:尝试Caliburn.Micro来帮助你绑定,而不使用我被告知可能导致内存泄漏的事件。 对于这些内存泄漏问题,他有一些聪明的解决方法,因此您根本不需要使用事件。

格雷格