新聞中心
WPF工具固然好用。但是作為一個(gè)出現(xiàn)不久的新工具,當(dāng)然會(huì)存在很多缺陷以及使用中的問題等。我們接下來將會(huì)了解到有關(guān)WPF內(nèi)存中有關(guān)泄露的一些問題。#t#

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比雙柏網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式雙柏網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋雙柏地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
Windows Presentation Foundation即WPF,它代表著Windows平臺UI的未來。微軟有其自身的打算,而稍晚于WPF的Silverlight將占領(lǐng)Web和移動(dòng)設(shè)備市場。不過,和任何的新技術(shù)一樣,都會(huì)經(jīng)歷一些問題,如某些相當(dāng)嚴(yán)重的內(nèi)存泄漏問題。
我們要討論諸多內(nèi)存泄漏。第一個(gè)WPF內(nèi)存問題已經(jīng)發(fā)現(xiàn)一段時(shí)間,但它并沒有引起大多程序員的關(guān)注,甚至是專家們的注意。引發(fā)該問題需要以下條件配合:
引用對象X屬性P的數(shù)據(jù)綁定路徑
對象X含直接引用或間接引用數(shù)據(jù)綁定操作的目標(biāo)對象
屬性P通過PropertyDescriptor對象而非DependencyProperty對象或PropertyInfo對象訪問
這個(gè)問題在KB 938416中有詳細(xì)的描述。
接下來是一個(gè)讓人極其厭煩的WPF內(nèi)存Bug,它在我們使用一個(gè)數(shù)據(jù)綁定集合代替另外一個(gè)時(shí)觸發(fā)。Ayende Rahien有引發(fā)該問題的源代碼。Mike Brown解釋道:
經(jīng)過深入研究以后,我發(fā)現(xiàn)該綁定系統(tǒng)并沒有解除對“Name”屬性的監(jiān)聽程序,但相關(guān)數(shù)據(jù)已被修改。
這很明顯是一個(gè)Bug,它和綁定系統(tǒng)有關(guān)。當(dāng)你注意到數(shù)據(jù)被修改過,而非解除已有綁定(這次假設(shè)Name綁定Textblock)并再次使用該元素,就像重新創(chuàng)建元素集那樣。不幸的是,Textblock從來沒有解除該綁定。現(xiàn)在如果讓數(shù)據(jù)變成可觀測的集合(必要情況下把匿名類型轉(zhuǎn)換為標(biāo)準(zhǔn)的類)并讓該集合觸發(fā)CollectionChanged事件(例如:Data[0]=Data[0]),一切運(yùn)行正常。
以下的內(nèi)存泄漏來自于jgoldb的微軟博客上:
如果初始HWND在XP上被撤銷就會(huì)導(dǎo)致CMilChannel泄漏
使用綁定的每條線程會(huì)導(dǎo)致ShutdownListener泄漏
在XP的HW中創(chuàng)建和消除WriteableBitmap
SW Viewport 3D w/ VisualBrush和WB等,都會(huì)在XP上引起泄漏問題
除了這些WPF內(nèi)存泄漏以外,他還列出了一些其他的常見開發(fā)錯(cuò)誤導(dǎo)致的內(nèi)存泄漏,以及一些已修復(fù)的WPF問題。
當(dāng)前標(biāo)題:WPF內(nèi)存之泄露防范方法介紹
文章源于:http://www.dlmjj.cn/article/dphhscj.html


咨詢
建站咨詢
