Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 595

•  TDictionary Custom Sort  6 604

•  Fast Watermark Sources  6 373

•  3D Designer  9 325

•  Sik Screen Capture  6 707

•  Patch Maker  7 092

•  Айболит (remote control)  7 096

•  ListBox Drag & Drop  5 961

•  Доска для игры Реверси  97 507

•  Графические эффекты  7 297

•  Рисование по маске  6 590

•  Перетаскивание изображений  5 461

•  Canvas Drawing  5 831

•  Рисование Луны  5 545

•  Поворот изображения  5 062

•  Рисование стержней  3 631

•  Paint on Shape  2 867

•  Генератор кроссвордов  3 756

•  Головоломка Paletto  3 022

•  Теорема Монжа об окружностях  3 835

•  Пазл Numbrix  2 521

•  Заборы и коммивояжеры  3 226

•  Игра HIP  2 192

•  Игра Go (Го)  2 123

•  Симулятор лифта  2 505

•  Программа укладки плитки  2 151

•  Генератор лабиринта  2 639

•  Проверка числового ввода  2 305

•  HEX View  2 638

•  Физический маятник  2 260

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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



Автор: Sergei Romancha

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


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

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

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

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


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 распределяется память под временные структуры данных, которая потом не освобождается.





Похожие по теме исходники

Примеры работы с БД

Примеры оформления DBGrid

Пример использования DBGrid

База предприятий и менеджеров 0.99

 

Консольное DOS приложение

Работа с принтером

Локализация приложений

Basic XML Tester

 

Creation XML

Askue (обработка XML)

Test XML XSD

INI XML Files

 



Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте