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