2012-04-17 73 views
4

我們有一臺內部機器,比起其他任何機器,啓動我們的Delphi 7應用程序慢了20倍。使用D7進行遠程分析(不是內存分析,但是計時...)

我們希望獲得一個性能配置文件(不是內存配置文件)來查找它花費的時間。

我們擁有的AQTime我們發現不會進行遠程分析。

我們不想花時間建立一個完整的D7 IDE開發環境,以便我們可以使用AQTime在我們的內部機器上剖析我們的應用程序。

該代碼有點太複雜,我們不想自己測量它。

探查器上的任何建議將遠程收集高級別(過程或行號)統計信息?

+0

採樣分析器不會在我們的情況下工作,因爲我們可以肯定的是,延遲發生在TCP/IP協議棧在內心深處,而不是在我們的德爾福單位中的任何一個。 – RobertFrank 2012-04-18 15:31:22

回答

1

爲什麼不能在機器上安裝AQTime,並用它作爲一個獨立的事件探查器?不需要「整個D7 IDE開發環境」。

+0

只要他們擁有的許可證允許。從版本7開始,它變得相當嚴格 - 當你在開發機器外面有奇怪的行爲時,用於遠程分析的模塊將受到歡迎。 他們可以嘗試免費版,也許它已經足夠。 – 2012-04-18 12:22:05

+0

除了最基本的AQTime使用之外,我不太瞭解它,但我不知道它可以在沒有開發環境的情況下使用。 (我們有一個浮動許可證,所以這不是問題。)我需要從我的開發機器(除了.exe)移動到測試機器的文件是什麼?感謝您的建議,並提供任何其他信息。 – RobertFrank 2012-04-18 13:43:40

+2

@Robert:你只需要exe。確保它是用調試信息編譯的。 IIRC AQTime手冊詳細解釋了這一點。 – Giel 2012-04-18 13:57:31

3

看看SamplingProfiler。它不會執行「遠程」分析,但它也不需要開發環境。它只需要能夠啓動要分析的程序(因此它必須在同一臺計算機上運行),並且程序必須在.EXE所在的文件夾中具有由鏈接程序生成的.MAP文件。如果這是內部的,那對你來說不應該是一個問題。

如果你看看幫助文件,你甚至會想辦法讓它只能分析程序的某些部分,這是AQTime無法做到的。如果您知道問題出現在某個特定位置(如啓動代碼),這會有所幫助。

+0

TD32調試信息也很好。 – Thomas 2012-04-18 00:04:06

+0

@Thomas:您可以擴展併發布答案嗎? – menjaraz 2012-04-18 03:59:01

+1

@menjaraz:沒有什麼拓展上,我只是提的是,SamplingProfiler還接受可執行文件中TD32調試節並不僅僅是地圖文件,遺憾的用詞模棱兩可。 – Thomas 2012-04-18 04:08:40

1

您可以使用我們的開放源代碼TSynLog class將分析添加到任何應用程序,而不僅僅是在開發人員計算機上。

它不是一個自動化的分析器,和其他工具一樣:你必須修改你的代碼。但它可以根據要求遠程運行,甚至在沒有任何通信的情況下也可以運行,即使是最終客戶方也是如此。

您添加了一些分析調用某些方法代碼,然後進入和離開方法將被記錄到一個文本文件。然後,supplied log viewer可用,並有一些專門的方法來執行分析,並確定慢速方法。

Profiling methods from log http://blog.synopse.info/public/LogView01.png

日誌機制可以用來跟蹤遞歸調用。它可以使用基於接口的機制來記錄當你進入和離開的任何方法:

procedure TMyDB.SQLExecute(const SQL: RawUTF8); 
var ILog: ISynLog; 
begin 
    ILog := TSynLogDB.Enter(self,'SQLExecute'); 
    // do some stuff 
    ILog.Log(sllInfo,'SQL=%',[SQL]); 
end; // when you leave the method, it will write the corresponding event to the log 

將被記錄爲這樣:

20110325 19325801 + MyDBUnit.TMyDB(004E11F4).SQLExecute 
20110325 19325801 info SQL=SELECT * FROM Table; 
20110325 19325801 - MyDBUnit.TMyDB(004E11F4).SQLExecute 00.000.507 

這裏的方法名在代碼中設置('SQLExecute' )。但是如果你有一個關聯的.map文件,日誌機制能夠讀取這個符號信息,並寫出事件的確切行號。您甚至可以使用高度壓縮版本的.map文件(900 KB .map - > 70 KB .mab,即比zip或lzma好得多),或者在構建時將其內容嵌入到可執行文件中。因此

在方法層面添加分析是添加一行代碼的方法只是開始的問題,因爲這樣的:

procedure TMyDB.SQLExecute(const SQL: RawUTF8); 
begin 
    TSynLogDB.Enter; 

    // do some stuff 

end; // when you leave the method, it will write the corresponding event to the log 

高分辨率時間戳也記錄在文件(這裏00.000.507 )。有了這個,您就可以在客戶端的真實計算機上通過數據來分析您的應用程序。通過Enter方法(及其自動離開功能),您可以獲得所需的全部信息。

通過分步procedding步驟,你會得到非常迅速給您的應用程序的瓶頸。並且可以根據要求在最終客戶方面做同樣的事情。

我用這幾個應用程序時,發現很容易一些瓶頸,甚至在特定的硬件,軟件和網絡配置(你永遠不知道你的客戶使用什麼),非常容易。