Używam w swoim programie funkcji TMask, do porównania masek filtrów z wynikami.
Ku mojemu zdziwieniu przy zdefiniowaniu więcej niż ~50 masek filtrów, funkcja TMask zwiększa zajętą pamięć o ~64kB/sekundę do rozmiarów rzędu 22MB po porównaniu na dysku ~15.000 plików.
Doszedłem w końcu do wniosku, że winna jest właśnie funkcja TMask.
Jestem na etapie stwierdzenia, że winą może być też błędna maska (używam wszystkich możliwych znaków dostępnych dla TMask: ?, *, [, ], -, !).
Funkcja która odpowiada za porównanie czy plik jest zgodny z listą masek:
function IsFileInclude(FileName: String): Boolean;
var
i: SmallInt;
VerifMask: TMask;
MustInclude: Boolean;
begin
i := 0;
MustInclude := False;
while (not MustInclude) and (i < IncludeFilters.Count) do
begin
VerifMask := TMask.Create(IncludeFilters.Strings[i]);
MustInclude := VerifMask.Matches(FileName);
Inc(i);
VerifMask.Free;
end;
Result := MustInclude;
end;
Cały program sprawdzony na obecność wycieków pamięci EurekaLog 6.0.21.
Gdzie leży problem ze zwiększaniem pamięci ?
Dodam, iż jeśli program zminimalizuję i przywrócę okno, pamięć programu maleje do ~5MB, po czym dalej wzrasta średnio 64kB na sekundę.