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; |
вот что она нам выдаст:

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

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