TClientDataSet. Утечка памяти при загрузке XML

Previous  Top  Next

    
 

 

 

Hапpимеp, если делаем:

 

Code:

ClientDataSet.LoadFromFile('c:\tmp\1.xml');

ClientDataSet.Close;

 

 

 

то видим, что память выделилась, но не освободилась.

 

Если даже делать ClientDataSet.Create и ClientDataSet.Free то все pавно будут утечки.

 

Пpобовал также пеpед закpытием:

Code:

ClientDataSet.EmptyDataSet;

ClientDataSet.CancelUpdates;

ClientDataSet.LogChanges := False;

ClientDataSet.MergeChangeLog;

ClientDataSet.FieldDefs.Clear;

ClientDataSet.IndexDefs.Clear;

ClientDataSet.Params.Clear;

ClientDataSet.Aggregates.Clear;

ClientDataSet.IndexName := '';

ClientDataSet.IndexFieldNames := '';

 

 

 

Все pавно не помогает.

 

Решения не нашел. Тестировал под D5 под W2000, W98. Также брал midas.dll от D6. Проблема осталась.

 

КОММЕНТАРИЙ

 

Действительно, проверка показывает, что при загрузке данных из XML-файла последующее закрытие ClientDataSet не освобождает часть выделенной памяти. Трассировка VCL не выявила ничего подозрительного в открытом коде TClientDataSet. Но часть операций производится COM-объектами, которыми пользуется ClientDataSet и которые находятся в midas.dll.

 

Установлено, что утечка памяти отсутствует, если данные в ClientDataSet поступают через провайдера, либо при загрузке из файла формата CDS (в котором ClientDataSet сохраняет данные по-умолчанию).

 

Следовательно, мы имеем проблему при локальном использовании ClientDataSet с файлом XML. Вероятно, в midas.dll при разборке файла XML распределяется память под временные структуры данных, которая потом не освобождается.

 

©Drkb::03107

       

Взято с http://delphiworld.narod.ru