專利名稱:程序運行效率分析方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,具體地,涉及一種程序運行效率分析方法及裝置。
背景技術(shù):
隨著軟件技術(shù)的發(fā)展,程序代碼的效率越來越受到技術(shù)人員的重視。目前存在幾種代碼效率分析工具,例如,蘋果的XCode開發(fā)環(huán)境有Analyze工具,可以使用其中的效率分析功能,在效率分析模式下,獲得每個函數(shù)的執(zhí)行時間;微軟的VS.net也包括相關(guān)的效率分析工具。目前的效率分析工具大部分都是由開發(fā)環(huán)境提供,每一個函數(shù)調(diào)用時長都可以被統(tǒng)計出來。這樣的設(shè)計無需改動代碼,但是帶來的問題是:由于這些效率工具是在每一個函數(shù)調(diào)用的前后增加了時間累計的功能,這就會改變程序執(zhí)行的時間長度,對于一些頻繁調(diào)用的小函數(shù)則改變的時間長度更加明顯,因此,增加的代碼對時間的影響已經(jīng)不能被忽略。所以在測試效率的時候,和最終release發(fā)布版本的運行環(huán)境有比較大的出入。另外,目前的分析工具從根本上來說,是“自底向上”進行分析,具體地:先找到下層最低的瓶頸處,再逐步向上進行分析定位。在程序規(guī)模較小時,函數(shù)的調(diào)用都是比較簡單的,比較容易向上定位到瓶頸處;但是當程序規(guī)模比較大時,比如多線程,如圖1所示的多線程調(diào)用程序,或者交叉調(diào)用、遞歸調(diào)用等,就不容易定位到程序的瓶頸處。綜上所述,目前效率分析工具存在精確度和測試效率都較低的問題。
發(fā)明內(nèi)容
本發(fā)明實施例的主要目的在于提供一種程序運行效率分析方法及裝置,以解決現(xiàn)有技術(shù)中的效率分析工具存在的精確度和測試效率都較低的問題。為了實現(xiàn)上述目的,本發(fā)明實施例提供一種程序運行效率分析方法,該方法包括:依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時;根據(jù)所述分支函數(shù)的運行時間以及預(yù)定規(guī)則對特定分支函數(shù)下的子函數(shù)運行時間進行計時;根據(jù)所述分支函數(shù)的運行時間和所述特定分支函數(shù)下子函數(shù)的運行時間分析所述程序的運行效率。優(yōu)選地,所述的預(yù)定規(guī)則為運行時間最長;所述的特定分支函數(shù)為運行時間最長的分支函數(shù)。依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時之后,所述的方法還包括:依自尾至首順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時。之后,上述根據(jù)分支函數(shù)的運行時間和所述特定分支函數(shù)下子函數(shù)的運行時間分析所述程序的運行效率包括:根據(jù)所述分支函數(shù)的運行時間、所述特定分支函數(shù)下子函數(shù)的運行時間和所述自尾至首順序運行程序的結(jié)果共同分析所述程序的運行效率。上述的方法還包括:保存運行過程中的時間數(shù)據(jù)。本發(fā)明實施例還提供一種程序運行效率分析裝置,所述裝置包括:第一分支函數(shù)計時單元,用于依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時;子函數(shù)計時單元,用于根據(jù)所述分支函數(shù)的運行時間以及預(yù)定規(guī)則對特定分支函數(shù)下的子函數(shù)運行時間進行計時;運行效率分析單元,用于根據(jù)所述分支函數(shù)的運行時間和所述特定分支函數(shù)下子函數(shù)的運行時間分析所述程序的運行效率。上述的預(yù)定規(guī)則為運行時間最長;所述的特定分支函數(shù)為運行時間最長的分支函數(shù)。優(yōu)選地,上述的裝置還包括:第二分支函數(shù)計時單元,用于依自尾至首順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時。上述運行效率分析單元具體用于:根據(jù)所述分支函數(shù)的運行時間、所述特定分支函數(shù)下子函數(shù)的運行時間和所述自尾至首順序運行程序的結(jié)果共同分析所述程序的運行效率。上述的裝置還包括:存儲單元,用于保存運行過程中的時間數(shù)據(jù)。借助于上述技術(shù)方案至少之一,通過依自首至尾順序分析函數(shù)運行時間,可以較容易快捷地找到程序瓶頸處,從而可以精確快速地分析程序運行效率。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是多線程調(diào)用程序的結(jié)構(gòu)示意圖;圖2是根據(jù)本發(fā)明實施例的程序運行效率分析方法的流程圖;圖3是根據(jù)本發(fā)明實施例的程序運行效率分析方法的詳細流程圖;圖4是一常見線程調(diào)用的結(jié)構(gòu)示意圖;圖5是根據(jù)本發(fā)明實施例的對常見線程調(diào)用計時的示意圖;圖6是根據(jù)本發(fā)明實施例的對常見線程調(diào)用計時的另一示意圖;圖7是根據(jù)本發(fā)明實施例的程序運行效率分析裝置的結(jié)構(gòu)框圖;圖8是根據(jù)本發(fā)明實施例的程序運行效率分析裝置的另一結(jié)構(gòu)框圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。由于現(xiàn)有的效率分析工具存在精確度和測試效率都較低的問題,基于此,本發(fā)明實施例提供一種程序運行效率分析方法及裝置,以解決上述問題。以下結(jié)合附圖對本發(fā)明進行詳細說明。實施例一本發(fā)明實施例提供一種程序運行效率分析方法,如圖2所示,該方法包括:步驟101,依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時;步驟102,根據(jù)分支函數(shù)的運行時間以及預(yù)定規(guī)則對特定分支函數(shù)下的子函數(shù)運行時間進行計時;步驟103,根據(jù)分支函數(shù)的運行時間和特定分支函數(shù)下子函數(shù)的運行時間分析程序的運行效率。由上述描述可知,通過依自首至尾順序分析函數(shù)運行時間,可以較容易快捷地找到程序瓶頸處,從而可以有效的分析程序的運行效率,相比于現(xiàn)有技術(shù)的從下至上的分析過程,本發(fā)明實施例可以快速定位程序瓶頸處,精確快速地分析程序運行效率。優(yōu)選地,上述的預(yù)定規(guī)則為運行時間最長;特定分支函數(shù)為運行時間最長的分支函數(shù)。即,特定分支函數(shù)由于運行時間最長,可以視為上述瓶頸處程序。在實際操作中,可以保存運行過程中的時間數(shù)據(jù),以供后續(xù)的分析或查閱。具體地,在程序運行過程中,設(shè)定存盤的觸發(fā)機制,例如,運行10分鐘之后存盤一次;在程序結(jié)束時,將運行結(jié)果保存到文本文件中,供使用者進行效率分析。為了提高程序分析的精確性和效率,可以在執(zhí)行步驟101-102時,依自尾至首順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時,之后,可以根據(jù)分支函數(shù)的運行時間、特定分支函數(shù)下子函數(shù)的運行時間和該自尾至首順序運行程序的結(jié)果共同來分析程序的運行效率。即,將現(xiàn)有技術(shù)中的從下至上的分析過程與本發(fā)明實施例的分析流程相結(jié)合,或者將現(xiàn)有的效率分析工具跟本發(fā)明實施例的分析流程相結(jié)合,從而可以更快的找到程序瓶頸。在具體實施過程中,可以在程序中加入一些時間累計的代碼,這些代碼可以在debug調(diào)試版本中出現(xiàn),也可以在release發(fā)布版本中出現(xiàn)。時間累計統(tǒng)計的最后結(jié)果可以輸出總時間、命中次數(shù)、平均耗時、長耗時命中次數(shù)、平均長耗時時間、備注等等項目。圖3是根據(jù)本發(fā)明實施例的程序運行效率分析方法的詳細流程圖,如圖3所示,該流程包括:步驟301,在程序代碼中插入統(tǒng)計代碼;步驟302,編譯、運行程序;步驟303,獲得運行結(jié)果數(shù)據(jù);步驟304,判斷程序耗時最多的瓶頸函數(shù);步驟305,判斷是否已經(jīng)定位到瓶頸邏輯處,如果是,則結(jié)束程序,否則,返回步驟301繼續(xù)執(zhí)行程序。以下舉一實例。圖4是一常見的線程調(diào)用,如圖4所示,while線程循環(huán),依次循環(huán)調(diào)用分支函數(shù)A、B、C。根據(jù)本發(fā)明實施例的程序運行效率分析方法,在主線程的每一個分支調(diào)用前后,力口入計時器計時,如圖5所示,分別在調(diào)用分支函數(shù)A、B、C前后加入計時程序。根據(jù)圖3所示的分析流程,假如發(fā)現(xiàn)分支函數(shù)A是耗時最多的調(diào)用,則需要重點關(guān)注分支函數(shù)A,繼續(xù)往下分析分支函數(shù)A的運行效率,如圖6所示,在分支函數(shù)A的分支函數(shù)Al、A2、A3前后分別加入計時程序,繼續(xù)執(zhí)行圖3所示的執(zhí)行分析流程,直到找到程序的瓶頸位置。通過若干層的遞歸調(diào)用,統(tǒng)計的最后結(jié)果可以輸出總時間、命中次數(shù)、平均耗時、長耗時命中次數(shù)、平均長耗時時間、備注等等項目。在程序運行過程中,可以設(shè)定存盤的觸發(fā)機制,例如,運行10分鐘之后存盤一次。在程序結(jié)束的時候,可以將運行結(jié)果存到文本文件中,供使用者進行數(shù)據(jù)分析。通過先在各個線程的線程函數(shù)處增加時間累計,然后根據(jù)累計出的時間數(shù)據(jù),判斷需要進一步處理的線程,再逐步向下分析效率,從而可以快速精確地定位到瓶頸調(diào)用。實施例二本發(fā)明實施例還提供一種程序運行效率分析裝置,優(yōu)選地用于實現(xiàn)上述實施例一中的方法。如圖7所示,該裝置包括:第一分支函數(shù)計時單元1,用于依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時;子函數(shù)計時單元2,用于根據(jù)分支函數(shù)的運行時間以及預(yù)定規(guī)則對特定分支函數(shù)下的子函數(shù)運行時間進行計時;運行效率分析單元3,用于根據(jù)分支函數(shù)的運行時間和特定分支函數(shù)下子函數(shù)的運行時間分析程序的運行效率。由以上描述可以看出,通過第一分支函數(shù)計時單元和子函數(shù)計時單元依自首至尾順序分析函數(shù)運行時間,可以較容易快捷地找到程序瓶頸處,從而可以有效的分析程序的運行效率,相比于現(xiàn)有技術(shù)的從下至上的分析過程,本發(fā)明實施例可以快速定位程序瓶頸處,精確快速地分析程序運行效率。優(yōu)選地,上述的預(yù)定規(guī)則為運行時間最長;特定分支函數(shù)為運行時間最長的分支函數(shù)。如圖8所示,上述裝置還可以包括:第二分支函數(shù)計時單元4,用于依自尾至首順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時。這樣,上述運行效率分析單元具體用于:根據(jù)分支函數(shù)的運行時間、特定分支函數(shù)下子函數(shù)的運行時間和自尾至首順序運行程序的結(jié)果共同分析程序的運行效率。這樣,通過將現(xiàn)有技術(shù)中的效率分析工具、或效率分析方法跟本發(fā)明實施例相結(jié)合,就可以更快地找到程序瓶頸,提高程序運行效率分析的效率和精確度。在具體實施時,上述裝置還可以包括:存儲單元,用于保存運行過程中的時間數(shù)據(jù),以用于后續(xù)的查閱和分析。上述各單元的具體執(zhí)行過程可以參考上述實施例一中的描述,此處不再贅述。綜上所述,本發(fā)明實施例通過“自頂向下”的方式進行瓶頸定位,從程序的源頭逐步向下解析,一步一步的進行時間效率的分析到耗時最多的調(diào)用處,可以快速定位到程序的瓶頸處,而且由于是從邏輯上進行定位,可以發(fā)現(xiàn)一些不必要的調(diào)用,比較符合人的思維方式。本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分步驟可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機可讀取存儲介質(zhì)中,比如R0M/RAM、磁碟、光盤等。以上所述的具體實施例,對本發(fā)明的目的、技術(shù)方案和有益效果進行了進一步詳細說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實施例而已,并不用于限定本發(fā)明的保護范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種程序運行效率分析方法,其特征在于,所述的方法包括: 依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時; 根據(jù)所述分支函數(shù)的運行時間以及預(yù)定規(guī)則對特定分支函數(shù)下的子函數(shù)運行時間進行計時; 根據(jù)所述分支函數(shù)的運行時間和所述特定分支函數(shù)下子函數(shù)的運行時間分析所述程序的運行效率。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述的預(yù)定規(guī)則為運行時間最長; 所述的特定分支函數(shù)為運行時間最長的分支函數(shù)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時之后,所述的方法還包括: 依自尾至首順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,根據(jù)所述分支函數(shù)的運行時間和所述特定分支函數(shù)下子函數(shù)的運行時間分析所述程序的運行效率包括: 根據(jù)所述分支函數(shù)的運行時間、所述特定分支函數(shù)下子函數(shù)的運行時間和所述自尾至首順序運行程序的結(jié)果共同分析所述程序的運行效率。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述的方法還包括: 保存運行過程中的時間數(shù)據(jù)。
6.一種程序運行效率分析裝置,其特征在于,所述的裝置包括: 第一分支函數(shù)計時單元,用于依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時; 子函數(shù)計時單元,用于根據(jù)所述分支函數(shù)的運行時間以及預(yù)定規(guī)則對特定分支函數(shù)下的子函數(shù)運行時間進行計時; 運行效率分析單元,用于根據(jù)所述分支函數(shù)的運行時間和所述特定分支函數(shù)下子函數(shù)的運行時間分析所述程序的運行效率。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述的預(yù)定規(guī)則為運行時間最長; 所述的特定分支函數(shù)為運行時間最長的分支函數(shù)。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述的裝置還包括: 第二分支函數(shù)計時單元,用于依自尾至首順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述運行效率分析單元具體用于: 根據(jù)所述分支函數(shù)的運行時間、所述特定分支函數(shù)下子函數(shù)的運行時間和所述自尾至首順序運行程序的結(jié)果共同分析所述程序的運行效率。
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述的裝置還包括: 存儲單元,用于保存運行過程中的時間數(shù)據(jù)。
全文摘要
本發(fā)明提供一種程序運行效率分析方法及裝置,其中,該方法包括依自首至尾順序?qū)Τ绦蛑骶€程的每一個分支函數(shù)的運行時間進行計時;根據(jù)分支函數(shù)的運行時間以及預(yù)定規(guī)則對特定分支函數(shù)下的子函數(shù)運行時間進行計時;根據(jù)分支函數(shù)的運行時間和特定分支函數(shù)下子函數(shù)的運行時間分析程序的運行效率。通過本發(fā)明,可以精確快速地分析程序運行效率。
文檔編號G06F11/36GK103164327SQ201110411328
公開日2013年6月19日 申請日期2011年12月12日 優(yōu)先權(quán)日2011年12月12日
發(fā)明者黃志陽 申請人:深圳市快播科技有限公司