真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++應(yīng)用程序性能優(yōu)化(一)——應(yīng)用程序性能優(yōu)化簡(jiǎn)介

C++應(yīng)用程序性能優(yōu)化(一)——應(yīng)用程序性能優(yōu)化簡(jiǎn)介

一、程序性能優(yōu)化簡(jiǎn)介

1、程序性能優(yōu)化簡(jiǎn)介

在計(jì)算機(jī)發(fā)展的早期階段,硬件資源相對(duì)而言是非常昂貴的,CPU運(yùn)行時(shí)間與內(nèi)存容量給程序開發(fā)人員設(shè)置了極大限制。因此,早期的程序?qū)\(yùn)行性能和內(nèi)存空間占用的要求是非常嚴(yán)格的,很多開發(fā)人員為了減少1%的CPU運(yùn)行時(shí)間,為減少幾十個(gè)甚至幾個(gè)字節(jié)而不懈努力。隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,硬件資源變得相對(duì)便宜。但如果認(rèn)為軟件開發(fā)時(shí),程序的性能優(yōu)化不再重要,硬件將解決性能問(wèn)題也是片面的。計(jì)算機(jī)硬件的發(fā)展解決了部分軟件的性能問(wèn)題,但隨著硬件計(jì)算能力的提高,用戶對(duì)軟件功能的要求也越來(lái)越高,軟件功能也變得越來(lái)越復(fù)雜,給用戶的界面和操作體驗(yàn)也越來(lái)越智能和友好。但復(fù)雜的用戶需求帶來(lái)軟件性能上的要求是硬件不能完全解決的。眾多實(shí)際項(xiàng)目經(jīng)驗(yàn)證明,如果在開發(fā)軟件時(shí)不重視性能優(yōu)化,最終實(shí)現(xiàn)了軟件的功能要求,但軟件的運(yùn)行效率低下,最終也不能給用戶帶來(lái)很好的效益。但另一方面,計(jì)算機(jī)硬件越來(lái)越便宜,而優(yōu)秀的軟件開發(fā)工程師則越來(lái)越昂貴,在軟件開發(fā)過(guò)程中無(wú)限制的性能優(yōu)化同樣會(huì)導(dǎo)致軟件開發(fā)過(guò)程中人力成本的大幅增加。因此,軟件開發(fā)過(guò)程中的性能優(yōu)化必須在便宜的計(jì)算機(jī)硬件和昂貴的優(yōu)秀工程師之間找到一個(gè)平衡點(diǎn)。

納溪ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

2、程序性能優(yōu)化的流程

應(yīng)用程序性能優(yōu)化的流程如下:
C++應(yīng)用程序性能優(yōu)化(一)——應(yīng)用程序性能優(yōu)化簡(jiǎn)介
(1)性能測(cè)量,對(duì)于規(guī)模較大、較為復(fù)雜的軟件系統(tǒng),測(cè)量性能數(shù)據(jù)是進(jìn)行性能優(yōu)化的基礎(chǔ)。只有獲取真實(shí)的數(shù)據(jù)才能分析數(shù)據(jù)找出系統(tǒng)的性能瓶頸。
(2)分析數(shù)據(jù),找到系統(tǒng)的性能瓶頸。性能瓶頸必須建立在客觀真實(shí)的性能數(shù)據(jù)基礎(chǔ)上,不能是主觀臆測(cè)的。
(3)分析原因,修改程序,是程序性能優(yōu)化的核心。程序的性能包括啟動(dòng)速度、運(yùn)行速度、運(yùn)行時(shí)占用內(nèi)存等。影響程序性能的因素主要分為兩類:
(1)軟件編程設(shè)計(jì)因素:算法和數(shù)據(jù)結(jié)構(gòu)的選擇,編程語(yǔ)言的使用。
(2)軟件系統(tǒng)結(jié)構(gòu)因素:動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù)的組織,外部數(shù)據(jù)的存儲(chǔ)以及網(wǎng)絡(luò)環(huán)境等。
軟件編程設(shè)計(jì)因素是對(duì)軟件性能影響較大的因素,只有對(duì)算法、數(shù)據(jù)結(jié)構(gòu)、編程語(yǔ)言有深入的了解才能分析出原因,并且找到解決性能問(wèn)題的方法。
軟件系統(tǒng)結(jié)構(gòu)因素通常與操作系統(tǒng)緊密相關(guān)。對(duì)于現(xiàn)代軟件,由于功能復(fù)雜,通常采用組件形式,以最大限度的提高可復(fù)用性。因此,一般會(huì)包含一些動(dòng)態(tài)庫(kù)、靜態(tài)庫(kù),庫(kù)文件的組織也會(huì)影響到軟件系統(tǒng)的性能。

二、程序性能的定義

1、性能指標(biāo)定義

應(yīng)用程序的性能指標(biāo)通常是多維的,比如響應(yīng)時(shí)間、并發(fā)量等。對(duì)于桌面應(yīng)用程序,其服務(wù)對(duì)象通常為終端用戶。因此,桌面應(yīng)用程序最重要的性能指標(biāo)是響應(yīng)時(shí)間,即針對(duì)某一個(gè)具體的操作,用戶從發(fā)出命令到應(yīng)用程序完成任務(wù)并響應(yīng)用戶的時(shí)間,響應(yīng)時(shí)間越短越好。
除了響應(yīng)時(shí)間,內(nèi)存使用也是桌面應(yīng)用程序的重要指標(biāo)之一。內(nèi)存使用包括進(jìn)程工作集(任務(wù)管理器看到的內(nèi)存使用)和虛擬內(nèi)存使用兩個(gè)指標(biāo),越小越好。如果一個(gè)應(yīng)用程序占用內(nèi)存過(guò)高,會(huì)影響其它正在運(yùn)行的應(yīng)用程序的響應(yīng)時(shí)間。
根據(jù)可用性設(shè)計(jì),桌面應(yīng)用程序的設(shè)計(jì)原則如下:
(1)小于0.1秒的響應(yīng)時(shí)間,用戶感覺(jué)是即時(shí)的。
(2)小于1秒的響應(yīng)時(shí)間,用戶感覺(jué)是可接受的。
(3)大于1秒的操作應(yīng)該有一個(gè)簡(jiǎn)單標(biāo)示(如鼠標(biāo)變成沙漏)。
(4)大于10秒的操作應(yīng)該有明顯的提示(如進(jìn)度條)。

2、性能基準(zhǔn)

桌面應(yīng)用程序的性能指標(biāo)包括響應(yīng)時(shí)間和內(nèi)存使用,但響應(yīng)時(shí)間和內(nèi)存使用指標(biāo)通常針對(duì)單個(gè)操作?,F(xiàn)代軟件系統(tǒng)通常包括多項(xiàng)功能,例如一個(gè)文字處理軟件能夠提供的功能不下數(shù)百種,每種功能作用在不同類型和大小的文檔上會(huì)表現(xiàn)出不同的性能,性能基準(zhǔn)就是用于定義程序的總體性能的。
性能基準(zhǔn)(Performance Benchmark)是用來(lái)衡量應(yīng)用程序整體性能的一套體系,通過(guò)為應(yīng)用程序輸入預(yù)先設(shè)計(jì)好的工作負(fù)載,運(yùn)行一批基準(zhǔn)用例,運(yùn)行結(jié)果可以反映應(yīng)用程序在通常情況下的性能。因此,性能基準(zhǔn)=基準(zhǔn)負(fù)載+基準(zhǔn)用例。
(1)基準(zhǔn)負(fù)載
對(duì)于桌面應(yīng)用程序,運(yùn)行性能基準(zhǔn)時(shí)需要的基準(zhǔn)負(fù)載通常表現(xiàn)為一系列基準(zhǔn)文件。基準(zhǔn)文件應(yīng)該是具有典型大小和典型內(nèi)容的文件,而基準(zhǔn)文件選取的優(yōu)劣直接影響性能基準(zhǔn)的準(zhǔn)確性。
對(duì)于通用文字處理軟件,主要功能是創(chuàng)建、打開文檔,修改并保存文檔,支持的文檔類型包括.doc,.dot,.odt,.ott,.txt,.lwp等,支持文字、圖片、文本框、表格、圖形等。設(shè)計(jì)基準(zhǔn)文件時(shí),從文檔類型考慮,在兼顧到主要的文檔類型又要排除類似的文檔類型;從文檔內(nèi)容考慮,需要覆蓋用戶最常用的內(nèi)容對(duì)象類型和文檔大小,具體基準(zhǔn)文件列表如下:
C++應(yīng)用程序性能優(yōu)化(一)——應(yīng)用程序性能優(yōu)化簡(jiǎn)介
對(duì)于同一種文檔類型,每一種文檔類型包含兩個(gè)基準(zhǔn)文件,分別有不同的文檔內(nèi)容。
(2)基準(zhǔn)用例
基準(zhǔn)用例是性能基準(zhǔn)測(cè)試時(shí)需要執(zhí)行的一系列用例?;鶞?zhǔn)用例的選擇有一定原則,既要盡可能全面地覆蓋應(yīng)用程序的主要功能,又不能像功能測(cè)試用例那樣復(fù)雜,因此,基準(zhǔn)用例應(yīng)該是用戶日常操作經(jīng)常遇到的情形。
不同的基準(zhǔn)用例在性能基準(zhǔn)中的地位并不相同,每一個(gè)基準(zhǔn)用例都需要一個(gè)權(quán)值來(lái)表明它對(duì)整體性能基準(zhǔn)的貢獻(xiàn)度。權(quán)值的定義依據(jù)具體情況各有不同,一個(gè)比較實(shí)用的定義公式如下:
權(quán)值=用例頻率X用例重要性
用例頻率是用戶一定時(shí)間內(nèi)執(zhí)行該用例的平均次數(shù)。理想的用例頻率應(yīng)該通過(guò)用戶行為數(shù)據(jù)反饋獲得。例如通用文字處理軟件的用戶一天內(nèi)可能會(huì)執(zhí)行“打開文檔”用例5次,執(zhí)行“保存文檔”的用例15次。
用例重要性是一個(gè)修正系數(shù),反映用例沒(méi)有完成前對(duì)用戶工作的影響程度。文字處理軟件打開一個(gè)文檔時(shí)有“異步打開”的功能,即程序會(huì)首先讀入文檔的部分內(nèi)容并顯示給用戶,然后在后臺(tái)繼續(xù)讀入文檔的后續(xù)內(nèi)容。對(duì)于“異步打開”功能可以定義兩個(gè)用例,“第一頁(yè)顯示”(從用戶選擇打開文檔到文檔的第一頁(yè)顯示出來(lái)的過(guò)程)和“全部讀入完畢”(從用戶選擇打開文檔到文檔的所有頁(yè)的內(nèi)容已經(jīng)加載完畢的過(guò)程)?!暗谝豁?yè)顯示”用例的重要性為1,表示不執(zhí)行完本用例,用戶不能繼續(xù)工作;“全部讀入完畢”用例的重要性為0.5,表示本用例不會(huì)顯著影響用戶的工作,文檔在后臺(tái)加載,用戶前臺(tái)已經(jīng)可以編輯,除非用戶需要編輯的內(nèi)容還沒(méi)有加載出來(lái)。
文字處理程序的部分基準(zhǔn)用例如下:
C++應(yīng)用程序性能優(yōu)化(一)——應(yīng)用程序性能優(yōu)化簡(jiǎn)介
相同的操作步驟操作不同類型或不同內(nèi)容的基準(zhǔn)文件會(huì)形成不同的基準(zhǔn)用例。

3、性能基準(zhǔn)的運(yùn)行

準(zhǔn)備好基準(zhǔn)文件和基準(zhǔn)用例后就可以運(yùn)行性能基準(zhǔn)并得出基準(zhǔn)結(jié)果。
為了保證性能基準(zhǔn)運(yùn)行的準(zhǔn)確性,性能基準(zhǔn)的測(cè)試環(huán)境必須滿足一定要求。例如保證固定的基準(zhǔn)測(cè)試平臺(tái)(軟件和硬件平臺(tái)不變),盡可能排除其它應(yīng)用程序?qū)δ繕?biāo)應(yīng)用層程序的影響?;鶞?zhǔn)測(cè)試平臺(tái)也可以有同時(shí)運(yùn)行在多種硬件平臺(tái)上的考量:運(yùn)行在4G內(nèi)存和8G內(nèi)存時(shí)應(yīng)用程序的性能表現(xiàn)的差別;運(yùn)行在三年前硬件配置和當(dāng)前主流硬件配置的性能表現(xiàn)的差別。
運(yùn)行基準(zhǔn)測(cè)試的過(guò)程是在固定的基準(zhǔn)測(cè)試環(huán)境中針對(duì)基準(zhǔn)文件順序執(zhí)行一系列基準(zhǔn)用例并記錄下每個(gè)用例結(jié)果的過(guò)程,執(zhí)行過(guò)程分為手動(dòng)執(zhí)行和自動(dòng)執(zhí)行,結(jié)果記錄也可以分為手動(dòng)記錄和自動(dòng)記錄。
通常手工執(zhí)行和記錄是基礎(chǔ),最能反映最終用戶的體驗(yàn)。
自動(dòng)運(yùn)行和記錄是目標(biāo),可以大幅提升工作效率,并排除人工不穩(wěn)定的結(jié)果。但自動(dòng)運(yùn)行的腳本必須保證多次自動(dòng)運(yùn)行結(jié)果的穩(wěn)定,保證自動(dòng)運(yùn)行結(jié)果和手動(dòng)運(yùn)行結(jié)果的可比較。
性能基準(zhǔn)運(yùn)行的過(guò)程需要注意:
(1)每一個(gè)用例需要運(yùn)行多次求平均值,如需要去除最大值、最小值,然后取平均值。
(2)多個(gè)用例執(zhí)行的先后順序必須固定,否則很難得到穩(wěn)定的性能基準(zhǔn)結(jié)果。

4、性能基準(zhǔn)結(jié)果

性能基準(zhǔn)運(yùn)行結(jié)果的原始數(shù)據(jù)是一系列的絕對(duì)數(shù)值,可以根據(jù)不同的需要生成不同的報(bào)告,如:
整體性能水平分值:每個(gè)用例絕對(duì)值結(jié)合每個(gè)用例的權(quán)值,可以給整體性能水平打分。
性能變化趨勢(shì)圖:歷史上不同版本的整體性能分值曲線可以體現(xiàn)出性能變化趨勢(shì)。
關(guān)鍵性能指標(biāo)圖表:給用戶演示的重點(diǎn)用例的結(jié)果圖表。
產(chǎn)品性能對(duì)比圖:和其它產(chǎn)品的性能對(duì)比圖,包括絕對(duì)值的對(duì)比和加權(quán)后分值的對(duì)比。
文字處理程序的部分基準(zhǔn)用例運(yùn)行結(jié)果數(shù)據(jù)如下:
C++應(yīng)用程序性能優(yōu)化(一)——應(yīng)用程序性能優(yōu)化簡(jiǎn)介
性能基準(zhǔn)可以反映應(yīng)用程序的總體性能,定義良好的性能基準(zhǔn)用途如下:
(1)應(yīng)用程序性能的絕對(duì)指標(biāo)。任何想要了解產(chǎn)品性能的人,無(wú)論是管理層還是客戶,都可以通過(guò)產(chǎn)品性能報(bào)告了解產(chǎn)品的性能。
(2)通過(guò)比較不同版本的基準(zhǔn)結(jié)果,提前發(fā)現(xiàn)性能下降的問(wèn)題和驗(yàn)證性能提升的設(shè)計(jì)結(jié)果。軟件開發(fā)過(guò)程中通常都會(huì)進(jìn)行每日構(gòu)建,性能基準(zhǔn)也可以在每日構(gòu)建的基礎(chǔ)上每日運(yùn)行,及時(shí)發(fā)現(xiàn)性能問(wèn)題,而不是在產(chǎn)品即將發(fā)布時(shí)進(jìn)行性能優(yōu)化。
(3)比較不同廠商的類似軟件的性能。橫向的比較需要性能基準(zhǔn),可以找出自己軟件產(chǎn)品的性能薄弱環(huán)節(jié),集中力量進(jìn)行優(yōu)化。

三、程序性能分析方法

1、性能分析方法簡(jiǎn)介

擁有定義良好的性能基準(zhǔn)后,可以輕易發(fā)現(xiàn)應(yīng)用程序存在的性能問(wèn)題。發(fā)現(xiàn)性能問(wèn)題后需要對(duì)性能問(wèn)題進(jìn)行分析,程序的性能分析過(guò)程包括:性能問(wèn)題分類、查找性能瓶頸、進(jìn)行性能優(yōu)化。

2、性能問(wèn)題分類

一個(gè)操作執(zhí)行太慢,需要首先分類是IO操作密集引起的問(wèn)題還是CPU相關(guān)的計(jì)算密集型問(wèn)題。正確的分類將直接影響進(jìn)一步的問(wèn)題分析。
區(qū)別IO相關(guān)還是CPU相關(guān)問(wèn)題的簡(jiǎn)單方法是隔離IO影響后,看性能是否得到改善,例如同時(shí)在機(jī)械硬盤和SSD硬盤上測(cè)試,如果性能顯著提高,則是IO相關(guān)的問(wèn)題。
對(duì)于文字處理軟件,冷啟動(dòng)需要10.5秒,熱啟動(dòng)需要2.1秒,因此冷啟動(dòng)的主要問(wèn)題在IO。無(wú)論是冷啟動(dòng)還是熱啟動(dòng),應(yīng)用程序都是完全退出后再重新啟動(dòng),執(zhí)行的代碼流程完全一樣,唯一區(qū)別在于IO:冷啟動(dòng)后操作系統(tǒng)會(huì)緩存很多動(dòng)態(tài)庫(kù)的代碼頁(yè)在內(nèi)存。

3、查找性能瓶頸

對(duì)性能問(wèn)題分類后,可以使用性能分析工具在代碼層次查找性能瓶頸,性能分析工具有監(jiān)測(cè)工具和注入工具兩類。
監(jiān)測(cè)工具如下:
perfmon,Windows工具,可以監(jiān)測(cè)所有的性能指標(biāo)。
FileMon,Windows工具,監(jiān)測(cè)IO操作。
ProcessExplorer,Windows工具,監(jiān)測(cè)進(jìn)程相關(guān)的所有操作。
sysstat,Linux工具,監(jiān)測(cè)所有的性能指標(biāo)。
iostat,Linux工具,監(jiān)測(cè)IO操作。
vmstat,Linux工具,監(jiān)測(cè)內(nèi)存變化。
注入工具如下:
IBM rational quantify,Windows工具,針對(duì)C++應(yīng)用程序代碼注入,可以計(jì)算函數(shù)調(diào)用次數(shù)、時(shí)間等。
Valgrind,Linux工具,針對(duì)C++應(yīng)用程序代碼注入,可以計(jì)算函數(shù)調(diào)用次數(shù)、事件、內(nèi)存分配、內(nèi)存泄漏檢測(cè)等。
IBM rational purify,Windows工具,針對(duì)C++應(yīng)用程序代碼注入,可以進(jìn)行內(nèi)存分析。
WinDbg,Windows工具,調(diào)試工具。
GDB,Linux工具,調(diào)試工具。
Dependency walker,Windows工具,分析動(dòng)態(tài)鏈接庫(kù)之間的動(dòng)態(tài)、靜態(tài)依賴關(guān)系。
ldd,Linux工具,分析共享對(duì)象間的依賴關(guān)系。

4、查找性能優(yōu)化機(jī)會(huì)

代碼層次的性能優(yōu)化設(shè)計(jì)的改動(dòng)通常局限在有限的函數(shù)調(diào)用內(nèi),相對(duì)比較容易完成。進(jìn)一步的性能提升的機(jī)會(huì)需要在設(shè)計(jì)層次進(jìn)行查找。設(shè)計(jì)層面的性能分析需要性能優(yōu)化者對(duì)軟件的整體架構(gòu)有比較深入的了解,需要具體問(wèn)題具體分析。

四、程序性能優(yōu)化方法

性能問(wèn)題分析完成后,需要進(jìn)行性能優(yōu)化。根據(jù)性能分析結(jié)果的不同,優(yōu)化方法也各有不同。

1、針對(duì)IO瓶頸的性能優(yōu)化

每次IO操作大概在10ms量級(jí),100次就需要1秒左右,因此盡量避免不必要的IO操作。具體做法如下:
(1)預(yù)先順序讀文件避免隨機(jī)訪問(wèn)。
(2)合并多個(gè)小文件為單個(gè)大文件。
(3)優(yōu)化動(dòng)態(tài)庫(kù)文件的加載。
(4)交錯(cuò)IO時(shí)間和CPU時(shí)間。

2、針對(duì)計(jì)算密集的性優(yōu)化

計(jì)算密集的性能問(wèn)題主要有內(nèi)存分配性能、字符串操作、共享變量的互斥鎖保護(hù)等,具體優(yōu)化方法如下:
(1)去除冗余代碼。
(2)字符串操作優(yōu)化。
(3)減少內(nèi)存分配、釋放操作,例如使用內(nèi)存池。
(4)減少不必要的互斥鎖操作。
(5)根據(jù)性能需求選擇數(shù)據(jù)結(jié)構(gòu)。
(6)延遲工作,按需執(zhí)行。
(7)減少跨進(jìn)程的調(diào)用。
(8)使用高性能的函數(shù)庫(kù)。

3、C++語(yǔ)言特性相關(guān)的性能優(yōu)化

C++語(yǔ)言特性相關(guān)的性能優(yōu)化包括內(nèi)聯(lián)函數(shù)、引用、編譯優(yōu)化選項(xiàng)等。

4、用戶體驗(yàn)的性能優(yōu)化

有些設(shè)計(jì)不能真正提升性能,但讓用戶體驗(yàn)到了性能提升。如:
(1)流式播放設(shè)計(jì),用戶不需要等到視頻文件下載完成再播放,可以邊下載邊播放。
(2)線程化設(shè)計(jì),對(duì)于需要較長(zhǎng)時(shí)間完成的操作,可以設(shè)計(jì)為非阻塞式的,用戶可以在等待時(shí)間完成其它操作任務(wù)。

5、設(shè)計(jì)層面的性能優(yōu)化

設(shè)計(jì)層面的性能優(yōu)化需要根據(jù)軟件整體架構(gòu)具體問(wèn)題具體分析。


新聞標(biāo)題:C++應(yīng)用程序性能優(yōu)化(一)——應(yīng)用程序性能優(yōu)化簡(jiǎn)介
URL網(wǎng)址:http://weahome.cn/article/ihjhjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部