Skip to content

提昇 .NETCF 應用程式的效能

七月 21, 2007

今年 MEDC 2007 其中有一項主題是 “Building High-Performance Apps Using the .NET Compact Framework",而演講者是 Ryan Chapman。剛好這個場次在台灣的 MEDC 也有被安排進去,簡報的內容是沒有換(英文改成中文),但講者則是由國內的葉佰蒼講師來擔任。

由於事先已經在網路上大致閱覽過原文,所以後來當天在聽葉佰蒼演講時,發現有不小的落差,一來是講師對於時間沒有掌控得很好,於是有很多細節都沒有很明確的加以說明,二來是顯然講師事前沒有將原文的簡報內容消化好,雖然有把原本英文的簡報改成中文,有些項目的解釋其實不太符合原文的意思,所以只好回頭看原文的簡報。

關於這場的簡報(APP403)可以到微軟網站下載取得,這邊則是記上幾個滿實用的改進方法︰

1. 避免使用過多的 virtual call,這會造成很大的負擔。C# 的 Properties 與 foreach 敘述均是以 virtual call 的方式來處理,而 PInvoke 的成本又是 virtual call 的好幾倍,因此若能減少 PInvoke 與 Properties 的使用,對於程式執行的效能則有顯著的提昇。

2. 嘗試用 index 的方法來代替 foreach 的工作,因為 foreach 最後也是會被轉成 virtual call 的方式處理,同樣也會影響效能。

3. 進行資料的存取時,SQL readers/writers 會比用 XML 處理資料還快上許多,若真要使用 XML 來處理資料時,那麼 XMLReader/XmlWriter 是比較好的選擇,能不要用 schemas 就不要用。

4. 對於長字串的串接工作,使用 StringBuilder 來處理。

5. Reflection 也是會造成程式執行的效能瓶頸之一,儘量少用對效能有一定的幫助。

6. 用 DateTime.ParseExact 方法來剖析日期與時間。

7. 當要使用 Thread 來做多工處理時,使用 ThreadPool 是正確的選擇。

其實 UI 的設計也是影響程式執行效能的一個很大因素,核心觀念是儘量在程式的背景下使用 Thread 來做額外的工作,有 一篇 MSDN 的文件 還提到,採用 Top-down 的方式進行控制項的初始化會比 Form Designer 自動產生的程式碼相比約可以提昇 49% 至 55% 的效能。

Ruslan 在很久以前有寫過 一篇 hints 相當值得參考。

無論如何,行動裝置的資源本來就受到許多限制,如何設計一個效能良好的行動應用程式,所該注意的事項比在 Desktop 環境上還要來得多,這個課題也是我直到最近才有比較深刻的體會。

廣告
No comments yet

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: