我有一個GUI應用程序,不有內存泄漏。我已經通過FastMM在很多測試周期中證實了這一點。 在一個特定客戶端的服務器上,我得到隨機崩潰。服務器規格與我們其他客戶的規格完全一致(並且我們實際上已經嘗試了各種硬件),程序使用的文件也是如此(據我所知,有一些超級敏感的材料,我無法訪問,但似乎沒有任何不尋常的事情)。德爾福 - 檢查內存被釋放「準時」
我嘗試過EurekaLog和MadShi這樣的可能縮小問題的範圍,但不幸的是,它們似乎只在碰撞時偶爾發生異常,而不是全部。當它發生時,通常會在崩潰之前顯示一個或多個「內存不足」錯誤。
所以我想,也許某些對象得到釋放「爲時已晚」,即只有當應用程序被關閉,而不是當我的意思是釋放他們?我已經看到了FastMMUsageeTracker演示,但並沒有真正理解這一切。有沒有文件的地方?或者有人可能會提供(有點容易理解)的話,我該如何去檢查這個問題?
或者,什麼是檢測應用程序已接近「內存限制」,以便採取一些預防措施,最好的辦法?如果我理解正確,一個普通的Delphi應用程序是32位,它應該很好地處理高達2Gb的內存(當然硬件支持它),對嗎?
PS:德爾福2009年或XE,如果是相關
謝謝!
編輯 - 問題可能解決
我們能夠找到一個問題,即封閉,並正在以更快的速度創造了一段時間後比它消失將自動釋放自己的彈出窗口。隨着時間的推移,這將會消耗大量的內存,然後任何內存分配都會基本上導致其超出邊緣並觸發「內存不足」問題。
這將解釋爲什麼堆棧跟蹤不一致。
我並不完全相信這是我們唯一的問題,因爲,雖然不太可能,這種情況下很可能之前已經在我們的應用程序已經運行多年的事,但不知何故,沒有。我會在這個問題上做更多的探索。
感謝所有回覆的人,每個答案其實都有寶貴的信息。
PS內存不足異常可能發生在大約1 GB以上的任何位置 - 沒有預定義的級別。有很多因素似乎影響了確切的閾值:總RAM,虛擬內存總量,其他進程使用了多少等。另外,我的代碼最初來自FastMM內存跟蹤器! – Misha 2011-03-10 03:57:50
值得注意的一件事:我從來沒有設法耗盡我工作過的項目中的可用內存,但是我幾次發現內存不足。在某些情況下,由於損壞或計算得不好的數據可能會導致內存管理器在您真正需要的幾K或更少的數量時分配幾GB的單個緩衝區。 – 2011-03-10 04:40:47