我在 Delphi 10 Seattle 撰寫的應用程式中遇到了非正常的記憶體消耗。它是使用 SDAC 的 Devart 作為 DB 組件的客戶端服務器胖客戶端型別的應用程式。
我不知道具體的工具,但我想知道是什么導致了記憶體消耗。
我觀察到的情況如下:當我啟動一個命令時,exe 使用的記憶體增長了很多(高達 1 GB,在一個曾經使用最多 200MB 的應用程式中),有時這會導致out of memory錯誤。記憶體不足錯誤的堆疊跟蹤沒有用,似乎是隨機的。
有人可以建議一種研究記憶體消耗的技術嗎?
我目前正在研究使用 FastMM4 的記憶體泄漏,并且我設法洗掉了一些,但只有輕微的(TStringlist或一些小的TBitmap),沒有任何理由證明 1GB 的記憶體消耗是合理的。
有沒有辦法說“unit4.pas 分配了 100MB 的 RAM”或任何其他類似有用的記憶體使用報告?
非常感謝。
我覺得卡住了,因為我不知道這項任務的工具。
uj5u.com熱心網友回復:
您是否使用BLOB型別查詢資料庫表列?如果是,那么找出最大的資料集,看看是否避免使用它們可以避免記憶體消耗。在 PHP 7.1 中,我在 TEXT 列上遇到了與 MySQLi 類似的問題(舊錯誤和Longtext max memory error using mysqli_query)。
實際上解決/防止記憶體消耗肯定是可以做到的——資料庫抽象層肯定知道另一種方法來查詢這些列,這種方法對雙方都更好:服務器和客戶端。隨意編輯此答案以包含您的實際代碼。
uj5u.com熱心網友回復:
您需要的是一個好的記憶體/分配分析器。
我不知道這種分析器中哪些功能是典型的或不是,因為我只使用過一個,但是我使用的那個允許在運行期間隨時獲取報告,顯示所有分配的記憶體以及應用程式中所說的記憶體被分配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/433772.html
標籤:德尔福 记不清 delphi-10-西雅图 德瓦特
