簡體   English   中英

在WPF 4中仍然存在的內存泄漏

[英]Memory Leaks Which are Still Present in WPF 4

我正計划構建一個WPF MVVM業務應用程序框架,在進行WPF平台內存泄漏研究時,我發現了許多文章。

在Windows Presentation Foundation中使用數據綁定時可能會發生內存泄漏
使用DataBinding避免WPF內存泄漏(Black Magic)
嚴重記憶泄漏瘟疫WPF
WPF和Silverlight中的前5個內存泄漏
WPF綁定錯誤導致可能的內存問題

但大多數可以追溯到2007年和2008年,所以我想知道哪些已經解決了,哪些沒有解決。

換句話說,在構建我的框架或一般情況下(WPF 4.0,.NET 4.0)時,可能會出現哪些內存泄漏(可能會發生)?

編輯:我會嘗試更具體。 我可以利用WeakEventManager及其子類來監聽事件而無需開發自己的解決方案嗎?

編輯2:更具體。 我是否可以使用WeakEventManager來解決.NET中事件導致的內存泄漏問題,而不僅僅是WPF? 如果是這樣,為什么它是WPF命名空間的一部分而不是一般的.NET命名空間?

首先出現在我的腦海里:

  • 來自System.Windows.Interactivity.dll的System.Windows.Interactivity.Behavior:當你期望它時,行為可能不會分離,反之亦然,在控件上留下添加的事件處理程序以生存gc
  • 僅僅根據您的描述我很確定您將來會使用第三方組件,我們發現這是泄漏的一流候選人

您在開始之前考慮這一點的事實是一個加分,投資一個好的MemoryProfiler並定期從一開始就配置您的應用程序,你會沒事的。

編輯:評論您的編輯:檢查您的鏈接我認為您可以隔離三個主要主題:

  • 實現INotifyPropertyChanged是必須的。 你的第一個開發人員告訴你“我只是一個靜態視圖,我的模型上的數據不會改變,我只是跳過了INPC”必須在公共場合進行繪制和分區。 更好的是,您的框架應該強制實現此接口,或者至少使開發人員盡可能輕松地使用它。
  • 不要綁定到PropertyDescriptors,這可能在一開始可能並不明顯,但是您的Framework可能會為開發人員設置路徑,僅將其用於綁定到自定義viewmodel屬性。
  • 始終取消注冊您的事件處理程序,我認為這更像是代碼衛生問題

關於弱事件的編輯,是的,這可能有用。 就個人而言,我不會考慮這種良好做法,因為它可能會導致您的模型暴露您注冊的事件的時間比您預期的要早。 我建議加倍努力,有意識地取消注冊您的處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM