某飛機制造研究所需要對其研發(fā)嵌入式軟件收集并呈現(xiàn)測試結(jié)果,其測試團隊使用WPF以及ACE技術(shù)開發(fā)了一個實時測試結(jié)果顯示程序。研究所要求對嵌入式軟件的測試結(jié)果顯示需要精確到20毫秒級別,以便及時發(fā)現(xiàn)對整個系統(tǒng)造成災(zāi)難影響的問題。
在測試程序的開發(fā)過程中,程序人員無法滿足20毫秒級別的測試結(jié)果收集精度,只能精確到100毫秒。另外,程序人員還發(fā)現(xiàn)其他幾個問題:
- 在程序的某些模塊里,響應(yīng)速度比較慢。
- 當(dāng)程序運行一段時間以后,會自動崩潰。
解決方案
針對上述三個問題,上海知平信息技術(shù)有限公司的性能調(diào)優(yōu)工程師采取了如下幾種針對性的措施:
- 對收集測試結(jié)果的部分代碼進行代碼復(fù)審,找出潛在的影響運行效率的代碼。并在代碼中添加條件編譯代碼跟蹤關(guān)鍵函數(shù)的運行記錄,以便后續(xù)分析。
- 使用Visual Studio和Windows SDK的性能測試工具,例如exe和WPFPerf.exe來定位執(zhí)行時間比較長的代碼,以及定位熱點代碼的調(diào)用堆棧,幫助找到根本原因。使用Visual Studio自帶的工具對比程序多次運行的性能報告,以確認(rèn)優(yōu)化效果。
- 使用exe在程序長時間運行崩潰之后,收集程序當(dāng)時的運行狀態(tài)以及內(nèi)存記錄,找到潛在問題點。重新運行程序后,依據(jù)任務(wù)管理器以及性能監(jiān)視器中針對程序的幾個性能指標(biāo),例如內(nèi)存分配情況,垃圾回收次數(shù),創(chuàng)建的句柄數(shù)等指標(biāo),使用Windbg提供的調(diào)試命令找到根本原因并修復(fù)程序崩潰的問題。
相關(guān)技術(shù):C#, WPF, Windbg, ACE
未經(jīng)允許不得轉(zhuǎn)載:上海知平信息技術(shù)有限公司 » WPF程序性能優(yōu)化
]]>