WPF優化體驗《一》

2022-03-17 11:27:36 字數 1393 閱讀 7645

最近將乙個開發和維護了五年的乙個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有諸多優點,有時我們還是...