Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.10.2011, 15:10
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию Сколько оперативной памяти потребляет приложение

Наткнулся на это но по моему тут что то другое показывает
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  pmc: PPROCESS_MEMORY_COUNTERS;
  cb: Integer;
begin
  cb := SizeOf(_PROCESS_MEMORY_COUNTERS);
  GetMem(pmc, cb);
  pmc^.cb := cb;
  if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then begin
      memo1.Lines.Add(Floattostr(pmc^.WorkingSetSize/1024/1024)); 
  end;
end;

по сути дела же в байтах, перевожу в мб, и получаю 6-7 хотя в диспетчере задач потребляет 1мб, вопрос как получить все таки если этот пример не о том.
Ответить с цитированием
  #2  
Старый 02.10.2011, 16:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вот что мне дала гугля:
Цитата:
WorkingSetSize определяет количество страниц физической оперативной памяти, которое одновременно доступно твоему процессу (остальные старницы будут виртуальными, т.е. отсвопленными). Это ограничение наложено для того, чтобы не поддерживать громадные страничные индексы для каждого процесса.
...
Вообще измерени памяти в Windows достаточно тонкая штука. В свое время писал оболочку для соревнований, так там память считается довольно хитрыми методами .
Действительно WorkingSetSize можно использовать для определения размера памяти, используемой программой. Но при это нужно учитывать, что она показывает только ИСПОЛЬЗОВАННУЮ память. Т.е. например, ты выделил блок размером 1Мб, но Windows не будет выделять эту память реально до тех пор, пока ты к этой памяти не обратишся, соответсвенно и WorkingSetSize увеличиваться не будет. После того как ты обратишься к перовому байты выделенной памяти, будет выделена память размером в страницу (опять не весь 1 Мб). WorkingSetSize увеличится на размер страницы. Тоже самое происходит и при статическом выделении памяти под переменные.
Вообще, винда исповедует "ленивое" управление памятью, например если ты загружаешь программу, то она отображает ее на память, но реально не грузит. Загрузка страницы данных в физическую память происходит при первом обрашении к этой странице. Именно в момент такой загрузки и выделяется память, а также увеличивается WorkingSetSize на размер страницы.

З.Ы. Кстати, такой механизм загрузки портит много крови, так как обращение к какой-нибудь DLL может резко увеличивать WorkingSetSize даже при том, что эта DLL может вообще не выделять память

Вывод: подсчет памяти для программы - тайна покрытая мраком.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 02.10.2011, 18:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,094
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А в таск менеджере включить отображение виртуальной памяти не пробовали?
Ответить с цитированием
  #4  
Старый 02.10.2011, 19:51
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

а мне нужно лог вести чтоб утечку отследить(записываю пришедший запрос и память текущую, следовательно если в следующем будет больше то в предыдущем утечка, сама программа ест 40мб но утечка к концу дня бывает не плохая в размере 1гб), там все очень массивно без лога никак.
Ответить с цитированием
  #5  
Старый 02.10.2011, 20:22
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от ALexandr555
сама программа ест 40мб но утечка к концу дня бывает не плохая в размере 1гб
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 03.10.2011, 15:52
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

так все ж таки никак не узнать ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:01.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025