Lenta kotirovok

Some blogs or websites linked from this site may contain objectionable or uncensored content, www.mainru.com is not affiliated with these websites and makes no representations or warranties as to their content.

четверг, 11 ноября 2010 г.

Пишем робота Урок №11

Тестируем классы на утечку памяти (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. Смотрим результат:

Теперь перейдем к классу 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;
Вот что выдала программа:
Как видим, и в этом классе тоже не возникает утечки памяти.
Теперь проверим класс 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 проверять не будем, он является вспомогательным, но если хотите, то протестируйте его самостоятельно и убедитесь, что и  в нем нет утечки памяти.


Поделится

Котировки

Идея