0

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

4

1 回答 1

0

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

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

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

第三:尝试使用 Caliburn.Micro 来帮助您绑定而不使用我被告知会导致内存泄漏的事件。他为这些内存泄漏问题提供了一些巧妙的解决方法,因此您根本不必使用事件。

格雷格

于 2013-10-01T20:37:17.660 回答