首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實用文檔 繽紛校園 英語學(xué)習(xí)
2010考研 | 自學(xué)考試 | 成人高考 | 專 升 本 | 法律碩士 | MBA/MPA | 中 科 院
四六級 | 商務(wù)英語 | 公共英語 | 職稱日語 | 職稱英語 | 博思 | 口譯筆譯 | GRE GMAT | 日語 | 托福
雅思 | 專四專八 | 新概念 | 自考英語 | 零起點英、、、韓語 | 在職申碩英語
在職攻碩英語 | 成人英語三級
等級考試 | 水平考試 | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
公務(wù)員 | 報關(guān)員 | 報檢員 | 外銷員 | 司法考試 | 導(dǎo)游考試 | 教師資格 | 國際商務(wù)師 | 跟單員
單證員 | 物流師 | 價格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢師
期貨從業(yè)資格 | 社會工作者
會計職稱 | 注會CPA | 經(jīng)濟(jì)師 | 統(tǒng)計師 | 注冊稅務(wù)師 | 評估師 | 精算師 | 高會 | ACCA | 審計師
法律顧問 | 會計證
一級建造師 | 二級建造師 | 造價師 | 監(jiān)理師 | 安全師 | 咨詢師 | 結(jié)構(gòu)師 | 建筑師 | 安全評價師
房地產(chǎn)估價師 | 土地估價師 | 設(shè)備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀(jì)人 | 造價員
投資項目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評價 | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師
公路造價工程師 | 招標(biāo)師
執(zhí)業(yè)護(hù)士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 系統(tǒng)分析師 > 正文

計算機(jī)軟件水平考試:C++Q&A:性能優(yōu)化

分配大量小型類對象(如:10,000小型記錄)最快和最佳方法是什么? 當(dāng)然,MFC 序列流化對象可以完成所需的任務(wù)。但是,內(nèi)存的分配和銷毀相當(dāng)耗時。有沒有辦法對此進(jìn)行改進(jìn)?
  我無法告訴你最好的方法,因為那取決與應(yīng)用程序的具體情況和其使用方式。性能和內(nèi)存分配是如此巨大的一個主題,有關(guān)它們已經(jīng)有很多很多書籍。沒有哪一種方案適合所有的情形。最優(yōu)化總是需要在速度和其它資源之間進(jìn)行明智的權(quán)衡。例如,如果你愿意建立巨型索引,那么就會獲得非?斓牟樵兯俣;蛘咭腼@示速度快,那么就得以加載時間作為代價。因此,我只能就某些需要考慮的問題給你提供一個概述,以及提供一些工具和途徑以幫助你自己找到答案。
  如果你覺得程序的性能不太滿意,首先必須確定瓶頸在哪,對此要有清醒的認(rèn)識。你可以借助復(fù)雜的工具(profiler)來產(chǎn)生各種有關(guān)性能的報告,但如果只是想知道你的代碼在哪里耗時,那么用一些自己編寫的簡單工具即可,我寫了一個類叫 ShowTime,它可以報告代碼的某些部分執(zhí)行時要花費多長時間。為了使用它,你只需在要用時鐘的代碼塊起始處實例化一個 ShowTime 堆棧對象即可:
void CalculatePi(){    ShowTime st("Calculating pi");   // do it}
這段代碼將產(chǎn)生一個象下面這樣的 TRACE 信息:
Calculating pi: 342 msec
  ShowTime 是如何工作的呢?它為智能指針以及在代碼塊起始處和末尾處你想做某些自動處理的地方使用常見的 C++ 構(gòu)造函數(shù)/析構(gòu)函數(shù)(ctor/dtor)模式。ShowTime 的構(gòu)造函數(shù)將時鐘時間(自從進(jìn)程啟動后的時鐘嘀嗒數(shù))保存在某個數(shù)據(jù)成員中;析構(gòu)函數(shù)則用從最后的時鐘數(shù)中減去這個時鐘數(shù)并產(chǎn)生一條信息。由于構(gòu)造函數(shù)/析構(gòu)函數(shù)是在代碼塊的起始處/末尾處調(diào)用的,這樣便測算出總共用了多少時間。代碼如 Figure 1 所示。
  ShowTime 并不太復(fù)雜。比如,它并不考慮多線程的情況,并且也不報告在每個函數(shù)中某個工具消耗了多少時間。但是對于日常使用來說,它能給你提供應(yīng)用程序在何處耗時的很好的參考。不要忘記針對 Release 版本進(jìn)行性能測試!畢竟那是你交付使用的版本。此外,Release 和 Debug 版本之間的差別可能會曲解你的結(jié)果。例如,依賴你的設(shè)置方式,debug 版本也許要進(jìn)行額外的堆棧,這樣便使應(yīng)用程序性能下降。由于在 Release 版本中沒有 TRACE 信息,所以我添加了另外一個類,PerfLog,它可以將性能統(tǒng)計定向到一個文件:
// open log filePerfLog mylog("MyResults.log");

轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索
計算機(jī)軟件水平考試:C++Q&A:性能優(yōu)化網(wǎng)友評論網(wǎng)友評論
版權(quán)聲明 --------------------------------------------------------------------------------------
    如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
 gaoxiaoliang