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

•  Animation Loaders  994

•  DeLiKaTeS Tetris (Тетрис)  5 923

•  TDictionary Custom Sort  7 873

•  Fast Watermark Sources  7 539

•  3D Designer  10 775

•  Sik Screen Capture  8 103

•  Patch Maker  8 297

•  Айболит (remote control)  8 349

•  ListBox Drag & Drop  7 200

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

•  Графические эффекты  8 415

•  Рисование по маске  7 789

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

•  Canvas Drawing  6 759

•  Рисование Луны  6 687

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

•  Рисование стержней  4 756

•  Paint on Shape  3 453

•  Генератор кроссвордов  4 456

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

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

•  Пазл Numbrix  2 841

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

•  Игра HIP  2 560

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

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

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

•  Генератор лабиринта  3 139

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

•  HEX View  3 023

 
скрыть

  Форум  

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-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

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