2013-03-22 6 views
6

я поддерживаю унаследованное приложение и у меня есть следующие строки коды:Что заменяет устаревший AllocMemSize

sb.Panels[3].Text:= ' Memory in use: ' + IntToStr(AllocMemSize); 

И это дает следующее предупреждение:

[dcc32 Warning] BLOB.pas(8242): W1000 Symbol 'AllocMemSize' is deprecated 

и в самом деле, AllocMemSize устарела (от System.pas):

var 
    AllocMemSize: Integer deprecated; {Unsupported} 

Мой вопрос: что такое замена AllocMemSize? Есть ли смысл? Есть ли какая-то другая более значимая мера, которую я могу там поместить?

(я предполагаю, что я могу просто удалить вызов и выход полностью, но пользователи по-видимому, хотят, чтобы увидеть эту информацию в строке состояния)

+1

Немного google search дал эту ссылку: http://www.delphigroups.info/2/5/1025020.html, возможно, не тот полезный, но AllocMemSize выглядит обреченным с самого начала ... –

+0

Да, я видел, что разговор, похоже, не помог. –

ответ

9

вызов GetMemoryManagerState вместо этого. Он возвращает аналогичную информацию, хотя не обязательно перегоняется до одного номера, такого как AllocMemSize. Утечка обусловлена ​​тем, что Delphi переключился на Delphi 2006 на использование FastMM для менеджера памяти и отслеживает память по-разному от более старого менеджера памяти.

См. Также Monitoring memory usage в документации.

+1

Итак, в соответствии с этим ответом я думаю, что ['this code'] (http://pastebin.com/w3sWfi94) может использоваться для получения общего выделенного пространства памяти для (всех?) Версий Delphi. – TLama

+0

У меня нет возможности проверить, @ Тлама. Я не знаю, что такое компилятор версии 18, но компиляторы, которые старые распознают директиву '$ IF'? –

+0

По крайней мере, Delphi 7 делает. 'CompilerVersion = 18' означает компилятор Delphi 2006. – TLama