文章編號: 938416 - 上次校閱: 2007年7月26日 - 版次: 1.1 當您使用 Windows 簡報 Foundation 中的資料繫結時,可能會發生記憶體遺漏
在此頁中徵狀當您使用資料繫結在 Microsoft 「 Windows 簡報基礎 (WPF) 時,可能會發生記憶體遺漏。 發生的原因如果下列情況成立,就會發生這個問題:
其他可行方案如果要解決這個問題,使用下列方法之一。 方法 1存取屬性 P 透過 DependencyProperty 物件。方法 2顯露 INotifyPropertyChanged 介面上物件 X。方法 3將資料繫結的模式設定為 OneTime。狀況說明這種行為是經過設計規劃的。 其他相關資訊在 WPF,未標示為 OneTime 必須接聽屬性的一個資料繫結作業會變更通知從來源物件 (物件 X)。 WPF 使用從 INotifyPropertyChanged 介面 DependencyProperties 類別的內建的通知。 如果無法使用 DependencyProperties 類別和 INotifyPropertyChanged 介面,WPF 會使用 ValueChanged 事件。 這個問題牽涉到對應至屬性 P [PropertyDescriptor 物件上呼叫 PropertyDescriptor.AddValueChanged 方法。 不幸的是,此巨集指令會導致公用語言執行時間 (CLR) 從 X 這個 PropertyDescriptor 物件以物件建立強式參考。 CLR 也保留通用資料表 PropertyDescriptor 物件的參照。 這種行為會造成參考鏈結,以下列順序發生:
因應措施方法 1 和因應措施方法 2 會造成 WPF 使用其中一種慣用的通知機制。 因應措施方法 3 指示 WPF 不到接聽變更通知。 所有三種因應措施方法避免建立之間 PropertyDescriptor 物件參考,以及物件 X。 在下列的程式碼範例會建立在遺漏的條件 因為物件 X 參考到物件 X 的子系,是符合 < 原因 > 一節中的第一個條件。這些子系包含繫結] 目標和繫結目標是 TextBlock 項目。 因為 P 屬性不是一個 DependencyProperty] 物件,物件 X 未實作 INotifyPropertyChanged 介面是符合 < 原因 > 一節中的第二個條件。 這種行為會導致 UIElementCollection 類別和 TextBlock 元素不會釋放。 此外,StackPanel 容器類別是不會發行,因為 UIElementCollection 類別包含 StackPanel 容器類別的參考。 即使 UIElementCollection 類別和 TextBlock 項目會移除從主要的樹狀目錄使用 code:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:938416?
(http://support.microsoft.com/kb/938416/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群文章翻譯 |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方