進(jìn)一步的性能調(diào)優(yōu)
如果你恰好足夠幸運(yùn)遇到了一位非?量痰挠脩簦瑢(duì)目前的性能水平還不夠滿意。那我們需要對(duì)現(xiàn)在的代碼進(jìn)一步進(jìn)行優(yōu)化以提高性能。
從新進(jìn)行上面的步驟,首先以所有方法的執(zhí)行時(shí)間進(jìn)行排序。之后按照耗時(shí)的順序從前往后進(jìn)行分析。根據(jù)對(duì)前面幾個(gè)方法的分析,我們發(fā)現(xiàn),前面幾個(gè)方法耗時(shí)較多的原因也都是因?yàn)榻K調(diào)用了我們的 parseContent 方法。
按照上面的步驟,點(diǎn)擊該方法以分析其具體執(zhí)行狀況:
在該方法的 Selected method incokes 部分,我們可以看到,createParser 耗費(fèi)了大部分的運(yùn)行時(shí)間。我們可以從兩方面入手進(jìn)行性能調(diào)優(yōu),一是改善該段代碼執(zhí)行邏輯以增強(qiáng)性能,例如我們的第一輪修改中,從 DOM 的分析模式改為 SAX 模式。另外是從代碼的調(diào)用次數(shù)上入手,減少性能不佳代碼的調(diào)用次數(shù)。例如在這里,通過(guò)進(jìn)一步分析,具有性能瓶頸的方法用于產(chǎn)生用于 XML 分析的解析器,邏輯非常簡(jiǎn)單,但卻被調(diào)用了 24 次。所以我們可以從減少次數(shù)的角度來(lái)增強(qiáng)性能。
分析代碼,我們可以創(chuàng)建一個(gè) SAX 解析器的私有變量以在每次解析 XML 的過(guò)程中重用同一個(gè)解析器對(duì)象。以如下的方式修改代碼:
重用 SAX 解析器對(duì)象的代碼
private
SAXParser _saxParser;
protected
SAXParser createParser() throws
ParserConfigurationException, SAXException
{
if
(_saxParser == null
)
{
SAXParserFactory f = SAXParserFactory.newInstance
();
f.setValidating(false
);
_saxParser = f.newSAXParser();
}
return
_saxParser;
}
之后再次執(zhí)行分析過(guò)程,會(huì)發(fā)現(xiàn),parseContent 方法的執(zhí)行時(shí)間已經(jīng)被縮減到了 0.017s 左右。通過(guò)我們的性能分析可調(diào)優(yōu),一個(gè)完成同樣任務(wù)的方法,其執(zhí)行時(shí)間已經(jīng)從 0.5s 降低到了 0.017s,相信苛刻的客戶也可以接受這樣的結(jié)果了吧。
本文通過(guò)一個(gè)示例說(shuō)明了在 Eclipse 插件開(kāi)發(fā)過(guò)程中如何使用 TPTP 進(jìn)行性能分析和調(diào)優(yōu)?梢钥吹,使用 TPTP 可以對(duì)程序運(yùn)行時(shí)的各種數(shù)據(jù)進(jìn)行直觀化、圖形化的分析。通過(guò)該工具的幫助,性能調(diào)優(yōu)以及程序運(yùn)行時(shí)狀態(tài)的分析其實(shí)是一件非常容易的事情。