條代碼,將所述調(diào)用文件的第一條代碼作為調(diào)用代碼,執(zhí)行調(diào)用代碼檢查子步驟;
[0045]調(diào)用代碼檢查子步驟,包括:對調(diào)用代碼進(jìn)行檢查:如果調(diào)用代碼為循環(huán)段落的起始標(biāo)識,則向預(yù)設(shè)隊列中加入循環(huán)標(biāo)識,執(zhí)行調(diào)用代碼結(jié)束判斷子步驟;如果調(diào)用代碼滿足預(yù)設(shè)的效率規(guī)則,且所述隊列中還保存有循環(huán)標(biāo)識,則進(jìn)行告警記錄,執(zhí)行調(diào)用代碼結(jié)束判斷子步驟;如果調(diào)用代碼為循環(huán)段落的結(jié)束標(biāo)識,則從所述隊列中移除循環(huán)標(biāo)識,執(zhí)行調(diào)用代碼結(jié)束判斷子步驟;
[0046]調(diào)用代碼結(jié)束判斷子步驟,包括:如果所述調(diào)用文件還有下一條代碼,則將下一條代碼作為調(diào)用代碼,執(zhí)行調(diào)用代碼檢查子步驟,否則退出所述調(diào)用文件,執(zhí)行步驟S103。
[0047]對于系統(tǒng)的函數(shù)調(diào)用或者類方法,以及第三方的函數(shù)調(diào)用或者類方法,其代碼效率,一般由系統(tǒng)或者第三方負(fù)責(zé),因此本實施例僅對非系統(tǒng)或非第三方的函數(shù)調(diào)用,或者所述代碼為非系統(tǒng)或非第三方的類方法進(jìn)行代碼效率檢查。
[0048]代碼是否是非系統(tǒng)、非第三方的函數(shù)調(diào)用或其它類的方法,一個簡單的判斷標(biāo)準(zhǔn)是該函數(shù)調(diào)用文件或者類文件是否在本工程中,若不在,則表明是系統(tǒng)的,或者是第三方的,否則就是自行編寫的函數(shù)調(diào)用或者類方法。
[0049]在其中一個實施例中,所述步驟S102,還包括:
[0050]當(dāng)向預(yù)設(shè)隊列加入循環(huán)標(biāo)識時,將所述循環(huán)段落的起始標(biāo)識所在的文件名、路徑和/或行號與所述循環(huán)標(biāo)識關(guān)聯(lián)保存,并初始化統(tǒng)計參數(shù);
[0051]所述告警記錄包括:獲取最新加入隊列的循環(huán)標(biāo)識所關(guān)聯(lián)的所述循環(huán)段落的起始標(biāo)識所在的文件名、路徑和/或行號作為循環(huán)參數(shù),將所述統(tǒng)計參數(shù)加一,并向預(yù)設(shè)的告警文件中寫入所述統(tǒng)計參數(shù)和所述循環(huán)參數(shù)。
[0052]將文件名、路徑和/或行號與所述循環(huán)標(biāo)識關(guān)聯(lián)保存,則能夠在告警文件中也同時顯示或提示是在哪個文件的循環(huán)段落出現(xiàn)對影響系統(tǒng)效率的代碼的高頻調(diào)用。
[0053]如圖2所示為本發(fā)明最佳實施例的工作流程圖,包括:
[0054]步驟S201,讀取規(guī)則配置文件,這個配置文件包含的是要檢查的各種規(guī)則。如對數(shù)據(jù)庫操作進(jìn)行檢查,例如sql操作,會檢查其中是否有繼承于BaseDao ;對大事務(wù)(BigTransact1n)檢查,會檢查是否有Transact1n的注解、或含有繼承于transact1n的類等。
[0055]步驟S202,進(jìn)入要檢查的指定目錄,for循環(huán)遍歷其中的每個文件。
[0056]步驟S203,打開文件,檢查代碼;
[0057]步驟S204,先判斷是否遇到諸如for、while之類的關(guān)鍵詞,若是執(zhí)行步驟S205,否則執(zhí)行步驟S206 ;
[0058]步驟S205,先把for、while壓入隊列,同時記下該for、while所在的文件名、路徑及行號,便于未來提示是在哪個文件的for可能出現(xiàn)高頻調(diào)用,繼續(xù)檢查下面的語句;
[0059]步驟S206,如果隊列中有for或while,則執(zhí)行步驟S207,否則執(zhí)行步驟S204 ;
[0060]步驟S207,判斷該語句是否是非系統(tǒng)、非第三方的函數(shù)調(diào)用或其它類的方法。對于函數(shù)調(diào)用或者類方法,一個簡單的判斷是該類文件是否在本工程中,若不在,則表明是系統(tǒng)的,或者是第三方的,若是非系統(tǒng)、非第三方的,則調(diào)用SRB檢查模塊,進(jìn)入函數(shù)或類方法中進(jìn)行檢查,具體流程見圖3的“SRB檢查模塊工作流程圖”,然后執(zhí)行步驟S208,對于其他調(diào)用,執(zhí)行步驟S209 ;
[0061 ] 步驟S208,從SRB模塊返回,執(zhí)行步驟S211 ;
[0062]步驟S209,根據(jù)規(guī)則庫,判斷該語句是否是數(shù)據(jù)庫sql操作、或者是遠(yuǎn)程rpc調(diào)用,若是,則記入告警文件中,執(zhí)行步驟S211,若否,執(zhí)行步驟S210 ;
[0063]步驟S210,判斷該語句是否是transcat1n (事務(wù)操作),若是,還需要往下檢查在commit之前有多少個事務(wù)操作,是否超過指定的數(shù)量,若是,則判定為大事物,記入告警文件中,執(zhí)行步驟S211 ;
[0064]步驟S211,是否該for、while循環(huán)結(jié)束?若是未結(jié)束則繼續(xù)檢查for、while的下一行代碼,執(zhí)行步驟S204,若是循環(huán)結(jié)束,則執(zhí)行步驟S212 ;
[0065]步驟S212,退出該循環(huán)檢查,同時從上面的for隊列出移除該for標(biāo)記;
[0066]步驟S213,判斷是否檢查完該文件;若是完成,則執(zhí)行步驟S214,否則執(zhí)行步驟S203繼續(xù)下一行代碼的檢查;
[0067]步驟S214,判斷整個工程檢查完畢,如果是則結(jié)束,否則執(zhí)行步驟S202選擇下一個文件。
[0068]如圖3所示為本發(fā)明最佳實施例的SRB檢查模塊工作流程圖,SRB是sql、rpc、bigtransact1n的首字母縮寫,具體包括:
[0069]步驟S301,檢查每行代碼;
[0070]步驟S302,根據(jù)規(guī)則庫,判斷該語句是否是數(shù)據(jù)庫sql操作、或者是遠(yuǎn)程rpc調(diào)用,若是,則記入告警文件中,執(zhí)行步驟S305,若否,執(zhí)行步驟S303 ;
[0071]步驟S303,判斷該語句是否是transcat1n (事務(wù)操作),若是,還需要往下檢查在commit之前有多少個事務(wù)操作,如果超過指定的數(shù)量,則判定為大事務(wù),記入告警文件中,執(zhí)行步驟S305,若不是事務(wù)操作或者不是大事務(wù),在執(zhí)行步驟S304 ;
[0072]步驟S304,若是還遇到函數(shù)、或類方法,則遞歸調(diào)用SRB模塊;
[0073]步驟S305,是否到了該函數(shù)或類方法末尾,若是,則退出該函數(shù)或類方法,返回上面調(diào)用SRB模塊的下一行代碼,否則執(zhí)行步驟S301繼續(xù)檢查下一行代碼。
[0074]如圖4所示為本發(fā)明一種代碼效率檢查系統(tǒng)的結(jié)構(gòu)模塊圖,包括:
[0075]代碼文件獲取模塊401,用于:獲取一個未檢查的代碼文件作為當(dāng)前代碼文件,所述代碼文件包括至少一條代碼,將所述代碼文件的第一條代碼作為當(dāng)前代碼,執(zhí)行代碼檢查模塊402 ;
[0076]代碼檢查模塊402,用于:對當(dāng)前代碼進(jìn)行檢查:如果當(dāng)前代碼為循環(huán)段落的起始標(biāo)識,則向預(yù)設(shè)隊列中加入循環(huán)標(biāo)識,執(zhí)行代碼結(jié)束判斷模塊403 ;如果當(dāng)前代碼滿足預(yù)設(shè)的效率規(guī)則,且所述隊列中還保存有循環(huán)標(biāo)識,則進(jìn)行告警記錄,執(zhí)行代碼結(jié)束判斷模塊403;如果當(dāng)前代碼為循環(huán)段落的結(jié)束標(biāo)識,則從所述隊列中移除循環(huán)標(biāo)識,執(zhí)行代碼結(jié)束判斷模塊403 ;
[0077]代碼結(jié)束判斷模塊403,用于:如果所述代碼文件還有下一條代碼,則將下一條代碼作為當(dāng)前代碼,執(zhí)行代碼檢查模塊402,否則執(zhí)行工程結(jié)束判斷模塊404 ;
[0078]工程結(jié)束判斷模塊404,用于:將所述當(dāng)前代碼文件設(shè)為已檢查的代碼文件,如果還有未檢查的代碼文件,則執(zhí)行獲取代碼文件獲取模塊401,否則結(jié)束。
[0079]在其中一個實施例中,還包括:
[0080]初始化模塊,用于:初始化統(tǒng)計參數(shù);
[0081]告警模塊,用于:當(dāng)所述統(tǒng)計參數(shù)超過預(yù)設(shè)告警閾值則進(jìn)行告警操作;
[0082]所述代碼檢查模塊中,所述告警記錄包括對所述統(tǒng)計參數(shù)加一。
[0083]在其中一個實施例中,所述效率規(guī)則為:
[0084]所述代碼為預(yù)設(shè)的數(shù)據(jù)庫操作語句;或者
[0085]所述代碼為預(yù)設(shè)的遠(yuǎn)程過程調(diào)用語句;或者
[0086]所述代碼為預(yù)設(shè)的事務(wù)操作啟動語句,且在預(yù)設(shè)的事務(wù)操作啟動語句和預(yù)設(shè)的事務(wù)操作結(jié)束語句之間包括超過預(yù)設(shè)操作閾值數(shù)量的事務(wù)操作語句。
[0087]在其中一個實施例中,所述代碼檢查模塊,還用于:
[0088]如果所述代碼為非系統(tǒng)或非第三方的函數(shù)調(diào)用,或者所述代碼為非系統(tǒng)或非第三方的類方法,則執(zhí)行調(diào)用檢查模塊;
[0089]調(diào)用檢查模塊包括:
[0090]調(diào)用文件獲取子模塊,用于:獲取所述函數(shù)調(diào)用或所述類方法的代碼文件作為調(diào)用文件,所述調(diào)用文件包括至少一條代碼,將所述調(diào)用文件的第一條代碼作為調(diào)用代碼,執(zhí)行調(diào)用代碼檢查子模塊;
[0091]調(diào)用代碼檢查子模塊,用于:對調(diào)用代碼進(jìn)行檢查:如果調(diào)用代碼為循環(huán)段落的起始標(biāo)識,則向預(yù)設(shè)隊列中加入循環(huán)標(biāo)識,執(zhí)行調(diào)用代碼結(jié)束判斷子模塊;如果調(diào)用代碼滿足預(yù)設(shè)的效率規(guī)則,且所述隊列中還保存有循環(huán)標(biāo)識,則進(jìn)行告警記錄,執(zhí)行調(diào)用代碼結(jié)束判斷子模塊;如果調(diào)用代碼為循環(huán)段落的結(jié)束標(biāo)識