【发布时间】:2011-01-28 18:03:22
【问题描述】:
我有一个主页,其中有 3 个枢轴项目,每个项目都有一个很重的 ListBox(每个大约 15Mb,这正常吗?)。 当某些操作发生时,我会在另一个页面中导航,那里有另一个带有 3 个项目的 Pivot 控件。到目前为止,一切都很好。 当我导航回主页时,我可以看到已用内存 +2 到 +4mb 的差异。每次我导航到新页面然后返回主页时,总使用内存都会增加 2-4 mb。我很确定我的代码没有任何问题。即使我的代码中存在内存泄漏,它也不会那么大。这可能与一些未发布的 UI 元素有关?我在两个页面中手动调用垃圾收集器 onNavigatedFrom 和 onNavigatedTo 以防万一,但仍然相同..
这可能是某些控件中的内存泄漏吗?正如我告诉你的,这两个页面都包含带有数据绑定列表框的数据透视项,并且数据在运行时不会更改。
谢谢
【问题讨论】:
-
您是否为页面中的任何事件添加事件处理程序?未能停止监听这些事件是内存泄漏的常见原因。
-
我在两个页面上都有几个事件处理程序,但我认为这些在页面被销毁时会被销毁。还是不行?
-
你是对的,德里克。我有一个来自 dll 的控件,它可以建立网络连接。每次我离开页面时,该控件都不会被破坏(我可以看到 webexception)。如果我再次访问该页面,则会创建另一个控件。因此,十次访问后,我可以看到 10 个网络异常。这很奇怪。那么为了销毁这些对象我必须做什么呢?这个控件可能有一个计时器,每 1 分钟调用一次网址。
-
@Derek - 这并不完全正确,这取决于您要添加事件处理程序的对象的生命周期。例如,您不必删除从页面内的 UI 控件发出的事件的处理程序,例如 Button.Click。这是因为 Button 与页面具有相同的生命周期。
标签: xaml silverlight windows-phone-7