Программирование - это просто
Advertisement
Главная arrow C#, Delphi, VB, F#, Web и пр. arrow Прочее программирование arrow Создаем биржевого робота уроки, статьи, идеи arrow Урок 11. Тестируем классы на утечку памяти (GlobalMemoryStatus, MemAvail).
17.07.2019 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Урок 11. Тестируем классы на утечку памяти (GlobalMemoryStatus, MemAvail). Печать E-mail
Автор megabax   
03.12.2009 г.
New Page 1

Тестируем классы на утечку памяти (GlobalMemoryStatus, MemAvail).

Все статьи по данной теме.

В этом уроке вам понадобиться материал (программные коды) предыдущих уроков:

Сначала мы проверим класс TPASSPriceSource. Это можно сделать вот такой программкой (кинем сперва на форму компонент TListBox и назовем его lbMemory) :

procedure TfrmMomentum.itLoadClick(Sender: TObject);
var lpBuffer: TMemoryStatus; i:integer;
begin
     GlobalMemoryStatus(lpBuffer);
     lbMemory.Items.Add(FloatToStr(lpBuffer.dwAvailPhys)+' --- '+
     FloatToStr(lpBuffer.dwAvailVirtual));
     if odOpenDialog.Execute then
     begin
        for i:=1 to 100 do
        begin
            if FPriceSource<>nil then FreeAndNil(FPriceSource);
            FPriceSource:=TPASSPriceSource.Create(odOpenDialog.FileName,false);
            FPriceSource.LoadDataFromTextFile(odOpenDialog.FileName);
        end;
     end;
     lbMemory.Items.Add(FloatToStr(lpBuffer.dwAvailPhys)+' --- '+
     FloatToStr(lpBuffer.dwAvailVirtual))
end;

вот что она нам выдаст:

утечка памяти (GlobalMemoryStatus, MemAvail)

Как видим, после ста создаваний и удалений объекта объем памяти не уменьшился. Следовательно, в этом классе утечки памяти нет.

Сделаем еще один тест. Закомментарим строку

FPriceSource.LoadDataFromTextFile(odOpenDialog.FileName);

и увеличим количество повторений цикла до 100000. Смотрим результат:

утечка памяти (GlobalMemoryStatus, MemAvail)

 

Теперь перейдем к классу TPASSMomentum:

procedure TfrmMomentum.btnTestClick(Sender: TObject);
var lpBuffer: TMemoryStatus; i:integer;
begin
      GlobalMemoryStatus(lpBuffer);
      lbMemory.Items.Add(FloatToStr(lpBuffer.dwAvailPhys)+' --- '+
              FloatToStr(lpBuffer.dwAvailVirtual));
      for i:=1 to 100000 do
      begin
         if FIndicator<>nil then FreeAndNil(FIndicator);
         FIndicator:=TPASSMomentum.Create(3,'Close');
      end;
      lbMemory.Items.Add(FloatToStr(lpBuffer.dwAvailPhys)+' --- '+
              FloatToStr(lpBuffer.dwAvailVirtual))
end;

Вот что выдала программа:

утечка памяти (GlobalMemoryStatus, MemAvail)

Как видим, и в этом классе тоже не возникает утечки памяти.

Теперь проверим класс TPASSStatAnalizMomentum:

procedure TfrmMomentum.btnTestClick(Sender: TObject);
var lpBuffer: TMemoryStatus; i:integer; SA:TPASSStatAnalizMomentum;
begin
    GlobalMemoryStatus(lpBuffer);
    lbMemory.Items.Add(FloatToStr(lpBuffer.dwAvailPhys)+' --- '+
    FloatToStr(lpBuffer.dwAvailVirtual));
    for i:=1 to 100000 do
    begin
         SA:=TPASSStatAnalizMomentum.Create(nil,10, nil);
         SA.Free;
    end;
    lbMemory.Items.Add(FloatToStr(lpBuffer.dwAvailPhys)+' --- '+
    FloatToStr(lpBuffer.dwAvailVirtual))
end;

Вот что выдала нам программа:
утечка памяти (GlobalMemoryStatus, MemAvail)

На этом мы закончим тестирование классов, класс TPASSStatStoreDataList проверять не будем, он является вспомогательным, но если хотите, то протестируйте его самостоятельно и убедитесь, что и  в нем нет утечки памяти.

 

 

Последнее обновление ( 04.07.2013 г. )
 
« След.   Пред. »
 
© 2019 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше