Коллеги, не могу разобраться с освобождением памяти объектов интерфейсного типа.
Вот есть у меня переменная:
var surveyList : IList<TSurvey>;
То есть это список простеньких объектов. Предположим, TSurvey - класс, содержащий два поля: Id и Name.
Есть функция которая заполняет этот список, например, из базы данных:
function GetList () : IList<TSurvey>
var
list : IList<TSurvey>;
i : Integer;
item : TSurvey;
begin
list := TCollections.CreateList<TSurvey>;
for i := 0 to 10 do
begin
item := TSurvey.Create ();
item.Id := берем_например_из_БД
item.Name := берем_например_из_БД
list.Add ( item );
end;
Result := list;
end;
И дальше необходимо в течении жизни программы обновлять этот список, то есть вызывать эту функцию.
surveyList := GetList ();
Так вот, при каждом вызове функции выделяется определенная память, например, 5 Мб. И каждый раз при вызове этой функции общий объем оперативной памяти увеличивается на 5 Мб (это видно из Диспетчера задач). Но ведь память интерфейсного объекта освобождается при величине счетчика ссылок равной 0. Почему тогда идет увеличение?
Пытался и так сделать:
if Assigned ( surveyList ) then begin
surveyList.Clear ();
surveyList := nil;
end;
surveyList := GetList ();
Но это не помогает. Как правильно освободить память?
Изменено пользователем Brovin Yaroslav Отформатирован код
Вопрос
Aptem
Коллеги, не могу разобраться с освобождением памяти объектов интерфейсного типа.
Вот есть у меня переменная:
То есть это список простеньких объектов. Предположим, TSurvey - класс, содержащий два поля: Id и Name.
Есть функция которая заполняет этот список, например, из базы данных:
И дальше необходимо в течении жизни программы обновлять этот список, то есть вызывать эту функцию.
Так вот, при каждом вызове функции выделяется определенная память, например, 5 Мб. И каждый раз при вызове этой функции общий объем оперативной памяти увеличивается на 5 Мб (это видно из Диспетчера задач). Но ведь память интерфейсного объекта освобождается при величине счетчика ссылок равной 0. Почему тогда идет увеличение?
Пытался и так сделать:
Но это не помогает. Как правильно освободить память?
Изменено пользователем Brovin YaroslavОтформатирован код
7 ответов на этот вопрос
Рекомендуемые сообщения