Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2012, 17:54   #1
DarkZiMAN
 
Регистрация: 05.04.2009
Сообщений: 5
Вопрос Очистка памяти при бесконечном цикле while

Здравствуйте !

Пишу прогу для мониторинга системы по WMI.
Сейчас работаю над загрузкой всех ядер/потоков процессора. Для этого в бесконечном цыкле считывается параметр "PercentProcessorTime" с "Win32_PerfFormattedData_PerfOS_Pro cessor" для всех ядер/потоков и при этом создается нужное количество Gauges и в них в процентном виде отображается загрузка.
Всё работает, но каждую секунду программа съедает около 16-20 кб памяти.

Вот цикл, который делает мне эту пакость:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  EnumCollection : IEnumVariant;
  CollectionItem : OleVariant;
  Value          : LongWord;
  ACount         : Integer;
  a              : Integer;
  i              : Double;
  index          : Integer;


begin

    EnumCollection := GetPropertyEnumCollection(strQuery, False);
    ACount := 0;
    while (EnumCollection.Next(1, CollectionItem, Value) = S_OK) do

    begin
      GaugeList[ACount].Progress := CollectionItem.PercentProcessorTime;

      inc(ACount);
      
    end;
end;
Скажите как для даного случая очищать память ?

Заранее спасибо.
DarkZiMAN вне форума Ответить с цитированием
Старый 09.01.2012, 20:22   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Нужно высвобождать память, занятую переменной EnumCollection. Возможно, функция GetPropertyEnumCollection выделяет память для этого типа данных, который нужно высвобождать определенным методом, смотрите WMI.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 09.01.2012, 23:27   #3
DarkZiMAN
 
Регистрация: 05.04.2009
Сообщений: 5
По умолчанию

все решилось с помощью строчки в конце цикла

Код:
VariantClear(CollectionItem);
DarkZiMAN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очистка памяти массива (С++) Сольвейг Помощь студентам 3 11.12.2011 22:37
Очистка памяти в односвязном списке Sigwey Помощь студентам 0 28.12.2010 17:02
Очистка памяти _-Re@l-_ Общие вопросы Delphi 4 22.05.2010 17:08
Очистка памяти Senator Общие вопросы Delphi 1 28.06.2008 19:39
Очистка памяти в C# darkstarx Общие вопросы .NET 1 14.04.2008 14:48