最近將乙個開發和維護了五年的乙個winform專案進行重構,考慮到最近很流行將使用者體驗掛在嘴上,於是採用了wpf技術,希望能在外觀和體驗上有乙個全新的效果。
以前使用winform的時候記憶體控制得不錯,軟體使用一天下來也就100m左右,現在使用wpf,十分鐘就達到了100m,在感慨wpf的胃口之餘也在思考怎樣將記憶體佔用量降下去。
首先寫了乙個測試專案,放兩個窗體。第乙個窗體放乙個datagrid,裡面繫結200條資料,第二個窗體放兩個測試按鈕,按鈕點選**如下。
//開啟20個測試視窗listwindows = new list();
private void button1_click(object sender, routedeventargs e)
}//關閉當前開啟的測試視窗
private void button2_click(object sender, routedeventargs e)
}//呼叫垃圾**器,強制**可用記憶體
private void button3_click(object sender, routedeventargs e)
現在準備開始測試:
點選button1開啟20個測試視窗,此時記憶體便達到了126m,點選button2,關閉所有測試窗體,記憶體110m,再次開啟20個測試窗體,記憶體205m,關閉所有窗體,記憶體185m,條用垃圾**,記憶體139m
將程式稍微改動了一下,關閉測試窗體時,將資料上下文繫結(datacontext)賦值為空,繼續測試
點選button1開啟20個測試視窗,此時記憶體便達到了123m,點選button2,關閉所有測試窗體,記憶體110m,再次開啟20個測試窗體,記憶體136m,關閉所有窗體,記憶體120m,條用垃圾**,記憶體55m
進行了多次測試,結果資料基本一致,為了更直觀的對資料有乙個比較,現將資料列表如下:
程式執行
開啟20個測試窗體
關閉20個測試窗體
再次開啟20個測試窗體
再次關閉20個測試窗體
強制垃圾**
關閉窗體時不做處理
17m126m
110m
205m
185m
139m
關閉窗體時將datacontext賦空值
17m123m
110m
136m
120m
55m所以,結論只有乙個,當我們使用mvvm模式繫結datacontext或是直接給列表控制項繫結資料來源的情況下,關閉窗體時,最好將繫結屬性賦乙個空值
protected override void onclosed(eventargs e)
以後會繼續博文,將親身經歷的wpf優化方案提出來,和大家一起**。
WPF程式開發體驗
2008年的時候參加了乙個微軟的.net3.5的培訓的時候就知道了wpf,對xaml也很神往,可以一直忙於專案,沒有學習和體驗的機會。今年正好接手了乙個專案,開始使用winform做的demo和部分實現,客戶希望用wpf開發,正好給自己學習wpf的機會。粗略的看了遍 wpf經典教程.pdf 和網上對...
WPF記憶體優化
之前的乙個wpf專案,執行時程式的占用記憶體總是不斷增長,最後能把電腦的記憶體空閒記憶體全部占用,程式變得越來越卡,使用者吐槽過好幾次了。看了看 一直都沒怎麼做過wpf,程式裡面大量的使用了定時器,全部是重複 可讀性較差,很多問題,先給了乙個鏈結 wpf 解決程式執行時間長後記憶體占用太大 可能是洩...
WPF 效能優化
wpf windows presentation foundation 是微軟推出的基於windows的使用者介面框架,執行在 net framework 3.0及以上版本。wpf是基於directx引擎的,支援gpu硬體加速,在不支援硬體加速時也可以使用軟體繪製。儘管wpf有諸多優點,有時我們還是...