WPF -.Net 4.0解決了DataGrid分組時的內存泄露

閱讀: 1324 評論: 10 做者: 周 金根 發表於 2010-05-20 14:43 原文連接html

  在OpenExpressApp中框架自帶一個【部門管理】模塊,其中【功能權限】設置時用了DataGrid,而且使用了DataGrid的分組功能,UI以下:express

用戶反應在使用過程當中,來回切換【業務對象】進行功能權限設置時,切換屢次後會發現容許速度慢的和蝸牛同樣。既然這麼明顯,打開任務管理器,未設置功能權限時內存消耗以下圖爲50496:架構

來回切換20次後,發現內存飈升爲94580,若是模塊負責一些的話,估計會漲得更多:app

爲了找到具體是哪一個類的泄露,我使用了ANTS Memory Profiler 5進行跟蹤,發現點擊多少次後就回出現多少個BoInfoOperationSelected[]對象框架

隨便找一個對象,查看對象圖,發現都是DataGridRow對象:ide

網上google一下,找到了DataGrid開源項目中的一個問題:Memory leak in DataGrid when grouping?  網站

裏面解釋了一下可能的緣由:this

It looks like in Grouping mode, the row's row.Tracker.StopTracking method is never called, because ClearContainerForItemOverride is never called by the WPF ItemsControl implementation. The result is that you just end up with an ever growing chain of ContainerTracking instances.google

最後還附上一句:spa

Note that Microsoft has acknowledged that this is a bug, being fixed in .NET 4.0. No fix for .NET 3.5 at this time.

把OpenExpressApp更新到Net4後,發現內存還真的不上去了,狂切換業務對象後再用ANTS Memory Profiler 5跟蹤一下對象看看,發現就兩個,內存泄露問題也沒有了!

這只是WPF內存泄露的一個地方,在Finding Memory Leaks in WPF-based applications中專門對WPF內存泄露問題進行了一些描述,估計後續會把Net4的內容加上。

 

 

開源信息系統開發平臺之OpenExpressApp框架.pdf

 

歡迎轉載,轉載請註明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]

評論: 10 查看評論 發表評論

滬江網招聘ASP.NET開發工程師


最新新聞:
· 谷歌收購廣告公司Invite Media(2010-06-02 22:16)
· AT&T擬推新數據計劃 iPad 3G用戶再也不享有無限(2010-06-02 21:36)
· 支持ARM架構:新版嵌入式Windows 7 CTP發佈(2010-06-02 19:51)
· Apple的平臺之路(三)(2010-06-02 19:27)
· Ubuntu 10.04可支持iPhone(2010-06-02 18:14)

編輯推薦:關於Java與.NET的討論

網站導航:博客園首頁  我的主頁  新聞  閃存  小組  博問  社區  知識庫

相關文章
相關標籤/搜索