2009-10-16 81 views
2

我建立了一個項目並運行它,然後在Process Explorer中查看它,結果發現它使用的RAM比我想象的多出5倍,只是爲了啓動。現在,如果我的程序執行得太慢,我將它連接到一個分析器,並告訴我所有的循環都在使用什麼。是否有任何類似的工具可以連接到它,並告訴我使用了所有的RAM?Delphi的內存分析工具?

+2

看到這個鏈接http://stackoverflow.com/questions/291631/profiler-and-memory-analysis-tools-for-delphi? – RRUZ 2009-10-16 19:26:31

+1

首先,忘記進程資源管理器,並使用getheapstatus從程序中獲取信息。這是更可靠的方式 – 2009-10-16 21:46:37

回答

6

AQTime也可以提供幫助。

0

AQTime一直是我們一個了不起的分析工具。它工作得非常好,讓我們能夠在沒有想到的地方找出瓶頸,而有時向我們展示我們確信沒有瓶頸。

它與Finalbuilder,Araxis Merge和TestComplete一起是一個不可缺少的工具!

+0

但是...請參閱:「爲什麼CharInSet比Case語句更快」在http://stackoverflow.com/questions/332948/why-is-charinset-faster-than-case-statement – lkessler 2009-10-16 22:17:46

4

您在Process Explorer中使用了哪些數字?

Windows中的「Memory Use」不是一個簡單的話題。幾乎每個應用程序都包含某種形式的內存管理器,它試圖滿足應用程序的內存需求,操作系統對此知之甚少 - 操作系統知道內存管理器正在使用的內存是什麼,但這並不總是與你的應用程序實際上使用相同的東西。

一個簡單的方法來看到這是看任務管理器報告的內存使用....啓動一個Delphi應用程序,請注意它是任務管理器中的「內存使用」。然後將該應用程序最小化到任務欄,您應該會看到內存使用量下降。即使再次恢復應用程序也不會導致內存使用回升到先前的水平。

粗略地說,當您最小化應用程序時,內存管理器將其作爲一個提示,它應該將任何不必要的「已用」內存返回給操作系統。也就是說,內存管理器正在使用這些內存來有效地爲應用程序提供服務,但應用程序本身並未實際使用它。

如果系統需要內存管理器,例如由於內存條件不足,內存管理器也應將此內存返回給系統。最小化任務欄「技巧」只是一個明智的優化 - 因爲最小化的應用程序通常不會被主動使用,所以它是自動執行這種「內務」的一個適當時機。

(這不是「壞事」,這只是一個需要注意考慮「內存使用」時)

更糟糕的是,除了內存的內存管理器使用,但它的應用程序不是,也有"commit charge"的問題,它不一定會顯示爲您的應用程序或其內存管理器使用的內存!

在Delphi應用程序(從Delphi 2006開始)中,內存管理器是FastMM,它有一個內置工具,可以告訴你你的應用程序內存使用的內容是什麼樣的(或者至少它使用了有這樣的工具 - 我沒有用過它)。

iirc使用它是一個簡單地添加一個單元到您的項目和在運行時創建一個窗體(通過幫助菜單上的某個「只調試」菜單項,或任何你選擇的機制)然後給你一個問題你的內存使用情況的「地圖」。

如果您使用的是早於2006年的Delphi版本,則仍然可以使用FastMM--它是免費且開源的。只需download it from sourceforge

0

除了其他:在我切換到D2006 +(並開始使用fastmm)之前,我使用了AQTime的免費memproof。它有一些問題,但它是可行的。