2009-12-20 23 views
3

我瀏覽並閱讀了很多關於StackOverflow上的分析器的問題/回答,但還有一個問題我還沒有找到答案。Profiler能夠在執行某些過程時啓動分析

我一直在用Delphi 7使用TurboPowers Memory Sleuth多年,並且還是很喜歡它。

但是,我打算升級到Delphi 2010,並懷疑這個程序將不再運行。所以我需要找一些替代品。

我非常喜歡Memory Sleuth的一件事情是,您可以從項目中編譯的列表中選擇一個過程來開始分析。

通常這是一個按鈕單擊事件。這樣,你可以輕鬆地簡單地分析一些冗長的代碼,你只需點擊一下按鈕,但是分析器不需要任何時間來啓動你的程序,顯示它的主要形式...

分析開始於選定的開始例程,並在選定的例程結束時結束。請注意,所有這些都不會改變代碼中的單一行(這一事實我覺得非常非常重要)。

任何建議當前存在(和維護)的配置文件可以爲我做這個嗎?

回答

2

AQTime絕對可以做到這一點。你可以選擇你想包含的任何模塊。但是如果你打算使用Delphi 2010,他們還沒有將它集成到IDE中。實際上就在幾周前,他們最終得到了他們的德爾福2009年集成工作 - D2009發佈後一年,從我最初看它,它似乎是越野車。

AQTime也是非常昂貴的$ 600。如果你喜歡它,可以從one of their partners購買,這樣你可以節省一些錢(例如,沙拉三明治提供500美元而不是600美元)。 {這是我個人的咆哮:這是一個讓我難以接受的可怕政策。直接從供應商處購買時,您不應該支付更多費用。他們應該讓他們的合作伙伴以相同的價格出售並給他們一個%,或者他們不應該在他們自己的網站上提供它,並且只列出你可以購買它的合作伙伴。}

但即使給定這些問題,AQTime是我發現的唯一工具,它能夠非常好地爲您提供逐行執行計數和計時。這是它給出的最終結果,它使得它值得,在過去的一年中,我重新分析了我在StackOverflow中給出的許多問題和答案後,我可能會最終與他們結束(我進入了第三次試用,現在他們已經添加了D2009集成)。

我的主要問題是在:

而且我已經在嘗試回答:

儘管梅森的評論,我沒有找到AQTime是分析太慢了,只要你只配置文件,您目前正在優化程序。只是不要總是打開所有的東西。

我也嘗試過Sampling Profiler。它只是沒有爲我工作。它似乎有90%的結果出現在系統例程中,其中字符串複製和移動佔據了大部分。這並沒有幫助我。我需要知道我的例程中的哪些行正在調用這些移動和複製。

如果你想要一個好的免費的,我會強烈推薦asmprofiler。它實際上是一個非常好的分析器,與AQTime類似,具有非常出色的性能結果。它唯一的缺點是隻能分析到程序層面而不是線路層面,這是我贊成AQTime的唯一原因。

p.s.對於微型優化,他們說不依賴於AQTime。我現在已經進行了大量測試,AQTime的幫助給我留下了越來越多的印象,它的行級信息可以幫助您找到適合微觀優化的地方。這本身就使得這款產品值得一提。

如果行級別的信息被添加到asmprofiler中,那麼這個將成爲一件容易的事。

但是,如果Embarcadero最終決定add a built-in profiler right into Delphi會不會很好?在我寫這篇文章時,它在Delphi UserVoice的第10位。 Vote Here to move it up!

+0

感謝您的積極反饋!不知道別人對它的想法,讓我有能量繼續它!我已經在考慮不那麼細緻和耗費內存的分析模式(只需存儲數量+總時間,而不是確切的細節)。我已經在研究PoC採樣分析(較少開銷,點擊即走分析),其結果比「採樣分析器」更好。 關於「行級」分析:有誰知道我該怎麼做?我知道「Intel VTune」也可以這樣做,但只能在採樣模式下使用。 – 2009-12-21 08:04:33

+0

(評論爲「asmprofiler」tips) – 2009-12-21 08:05:24

+0

André:內置分析器在http://delphi.uservoice.com/pages/4432-general上列出第10位 - 因此Embarcadero可能願意與您一起整合asmprofiler轉化爲Delphi的未來版本。 – lkessler 2009-12-21 14:45:41

3

看看Sampling Profiler。這不是相當於儘可能簡單,但它是一個非常好的工具,您可以使用OutputDebugString調用爲選定的過程打開和關閉分析。我認爲這與你在沒有Embarcadero撰寫分析器的情況下一樣好。

+1

我剛看了一下Sampling Profiler。我感到所有樣本都是程序計數器,而不是調用堆棧。與此問題是這樣的:http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 – 2009-12-21 14:49:51

4

商業上有AQTimeAutomatedQA,它的功能很豐富。它可以做你正在問的東西。

+0

對AQTime的另一票。如果你有這筆錢,這是這份工作的最佳工具。 – Birger 2009-12-20 15:57:36

+0

我目前正在下載演示。與其他答覆中提到的那些一起嘗試(另外一些話題)。 但是,首先,我要完成我正在編寫的程序,這將在工作日中放置36個小時(以找出時間來嘗試它們)。謝謝(你的)信息。 – Edelcom 2009-12-20 16:44:05

+0

@Birger:取決於工作是什麼。我有AQTime,我有Sampling Profiler,坦率地說,我更喜歡Sampling profiler來處理大多數事情,因爲它不會減慢你的程序。 – 2009-12-20 16:59:30

2

爲了找到內存泄漏,像AQTime這樣的東西可能是最好的。爲了找出速度問題,你有沒有考慮過stackshots的簡單方法?這是低科技但有效的。 Here's an explanation.

+1

當一些代碼似乎太慢時,我不會開始分析...我懷疑我可以讓它運行得更快(我知道它被多次調用),所以我剖析了我的代碼。 我需要一個程序,告訴我哪些例程經常被調用,並且花費了大部分時間。 Idealy我需要一個程序,顯示選定程序中的哪一行佔用了大部分時間。這樣我可以真正加快我的程序的一部分。您會驚訝於您可以提高看似優化代碼的速度。 – Edelcom 2009-12-21 13:51:02

+0

@Edelcom:我不能說比你更好。這是一個例子:http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773 – 2009-12-21 14:14:25

+0

@Edelcom:沒有任何理由懷疑它可以運行得更快。幾乎*全部*代碼屬於該類別。那麼,如果速度夠快呢?我都是爲了提高效率而設計的,但是我對這種微型優化和分析器的癡迷讓我無法理解。 @Mike:鏈接中的好回答,但我已經提出了。它很好地顯示了宏觀優化會帶來什麼收益。 – mghie 2009-12-21 20:23:50

相關問題