Изначально мой класс базировался на TList<T>, но по ряду причин после обработки 500к файлов память забивалась до 150 Мб, и методом TList.Free не освобождалась. Изменил базовый класс на TObjectList , память этим методом TObjectList.Free очищается полностью (100 итераций заполнение - очистка списка).
Если я Вас верно понял то в описании класса достаточно описать так:
TListFile<T: TFileInfo> = class(TObjectList<T>)
private
...
AOwnsObjects = True;
...
function GetAllSize: Int64;
public
...
property AllSize: Int64 read GetAllSize;
// procedure Clear; overload; //тут можно удалить процедуру
...
end;
Или требуется сделать так:
TListFile<T: TFileInfo> = class(TObjectList<T>)
private
...
function GetAllSize: Int64;
public
...
property AllSize: Int64 read GetAllSize;
constructor Create; overload;
// procedure Clear; overload; //тут можно удалить процедуру
...
end;
...
constructor TListFile<T>.Create;
begin
inherited create;
AOwnsObjects = True;
end;
...
Если Вас не затруднит еще один небольшой вопрос.
Столкнулся со сравнением двух списков TListObject<T>, где Т: class содержащий информацию о файлах.
Сравнивать как списки как:
for T in ObjectList1 do
if ObjectList2.IndexOf(T)>0 then
// тут код сравнения
однозначно позволяет установить что именно class 'T' в ObjectList1 точно соответствует class 'T' в ObjectList2. Так как отсутствие class 'Т' из ObjectList1 или малейшее его изменение в списке ObjectList2 однозначно требует проверки на внутреннюю проверку списков методом:
var
isModif: Boolean;
begin
...
for T1 in ObjectList1 do
begin
isModif := False;
for T2 in ObjectList2 do
begin
if T1.Name = T2.Name then
begin
if (T1.Size <> T2.Size) or (T1.ModDate <> T2.ModDate) then
T1.Status := fiModif // const fiModif = $00000001
else
T1.Status := fiNoModif; // const fiNoNodif = $00000002
isModif := True;
end;
if not isModif then
T1.Status := fiCreate; // const fiCreate = $00000004
end;
end;
Если этот же класс реализовать через TDictonary добавив в TKey T1.Name и уже сравнение проводить согласно вхождению файлов в список ObjectList2 скорость сравнения достаточно увеличится или можно пренебречь реализацией?