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

•  DeLiKaTeS Tetris (Тетрис)  121

•  TDictionary Custom Sort  3 309

•  Fast Watermark Sources  3 059

•  3D Designer  4 813

•  Sik Screen Capture  3 310

•  Patch Maker  3 526

•  Айболит (remote control)  3 627

•  ListBox Drag & Drop  2 989

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

•  Графические эффекты  3 916

•  Рисование по маске  3 223

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

•  Canvas Drawing  2 729

•  Рисование Луны  2 552

•  Поворот изображения  2 161

•  Рисование стержней  2 160

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 223

•  Головоломка Paletto  1 764

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

•  Пазл Numbrix  1 680

•  Заборы и коммивояжеры  2 051

•  Игра HIP  1 276

•  Игра Go (Го)  1 222

•  Симулятор лифта  1 469

•  Программа укладки плитки  1 213

•  Генератор лабиринта  1 540

•  Проверка числового ввода  1 348

•  HEX View  1 487

•  Физический маятник  1 353

 
скрыть


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-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

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