Получение данных от программы

Здесь обсуждаются технические аспекты создания дополнений.
Аватара пользователя
leonbratsk
Сообщения: 488
Зарегистрирован: 14:07, 21.03.2010

Получение данных от программы

Сообщение leonbratsk » 16:52, 04.04.2012

Вопрос, который состоит в моем неумении наверно.
Допустим, мы получаем данные

Список объявлений

ID: 1071
Блок данных (исходящий): число(ID раздела)
Блок данных (входящий): число(количество) + (число(ID объявления) + дата_и_время(публикации объявления) + текст(имя автора) + текст(заголовок объявления) + число(количество комментариев))*количество

Нам нужно именно число(количество), а все остальное не нужно. Мы отправляем запрос, и получаем блок данных. Заносим число(количество) в переменную. А со остальным ничего не делаем. Так вот, куда уйдет все остальное? Будет храниться в памяти или же после того, как запрос закончиться и мы примем нужные данные все очиститься?
Чат CommFort города Братск "SkyLine"
адрес: vcommforte.com или 194.146.200.130
версия сервера: 5.40

Maxim Mirgorodsky
Администратор
Сообщения: 6734
Зарегистрирован: 09:56, 27.06.2005
Благодарил (а): 1 раз

Re: Получение данных от программы

Сообщение Maxim Mirgorodsky » 09:34, 05.04.2012

Если Вы в своем коде выделяете память, но не освобождаете ее (и этого не делает компилятор автоматически) - будет утечка. Если память выделяется не в Вашем коде, то она освобождается. В любом случае Вы себе забираете полный блок данных. Работали Вы с ним или нет - в любом случае память нужно освобождать.

Аватара пользователя
leonbratsk
Сообщения: 488
Зарегистрирован: 14:07, 21.03.2010

Re: Получение данных от программы

Сообщение leonbratsk » 10:31, 05.04.2012

Понятно теперь. А то столкнулся с ошибкой "Out of memory". Поначалу думал, что не правильная переходность переменных, потом дошло, что память не освобождается. Попробовал Free(пишу на Delphi), как оказалась работает только на компоненты.
procedure TrimWorkingSet;
var
MainHandle: THandle;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(MainHandle, DWORD(-1), DWORD(-1));
CloseHandle(MainHandle);
end;
end;

Будет ли такая процедура самая оптимальная для очищении памяти в плагинах для коммфорта?
Чат CommFort города Братск "SkyLine"
адрес: vcommforte.com или 194.146.200.130
версия сервера: 5.40

Maxim Mirgorodsky
Администратор
Сообщения: 6734
Зарегистрирован: 09:56, 27.06.2005
Благодарил (а): 1 раз

Re: Получение данных от программы

Сообщение Maxim Mirgorodsky » 10:35, 05.04.2012

Каждому методу выделения памяти соответствует рекомендуемый метод освобождения.

Ответить