Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.07;
Скачать: CL | DM;

Вниз

Утечка памяти COM сервера реализованного на Delphi 4-7.   Найти похожие ветки 

 
MMax   (2003-07-24 04:30) [0]

Утечка памяти COM сервера реализованного на Delphi 4-7.
Кто натыкался на этот подводный камень?
Создаю сервер. File->New->Automation Server->“MemLeakAutoServ” (Multiple Instance, Apartament).
Затем создаю клиент. Project->ImportType Library-> MemLeakAutoServ.
Затем запускаю следующий код:
Procedure TclassName.OnTimer; Begin
MemLeakAutoServ.Connect;
MemLeakAutoServ.DisConnect;
End;
Через 30 минут сервер “MemLeakAutoServ” раздувается до 256 мегабайт.
Заранее благодарен за ответ.


 
clickmaker ©   (2003-07-24 10:44) [1]

А что делает этот сервер?


 
MMax   (2003-07-24 11:46) [2]

 Этот сервер поставляет архивные данные клиентам.
Данные берутся с MySQL сервера.
 Сервер был мною переписан на C++ Builder.
 Как ни странно в  C++ Builder вопроса об очистке памяти не стоит.

На будущее хотелось бы знать, как осуществлять очистку памяти за COM клиентами в Delphi.



 
clickmaker ©   (2003-07-24 12:45) [3]

В принципе, для уничтожения экземпляра серверного объекта нужно сказать что-то типа MemLeakAutoServ := nil; (или Null, если MemLeakAutoServ объявлен как Variant)


 
Набережных С. ©   (2003-07-25 18:23) [4]

Не надо ничего перегружать - при осмысленном использовании предопределенных классов. Рост захваченной памяти обусловлен особенностями дельфийского менеджера памяти. Особенно это проявляется при работе с AnsiString. Лучший выход тут - исподьзование свокго менеджера, учитывающего особенности конкретного серверного приложения. Однако, указанный размер утечек наводит на мысль о чисто дилетантских причинах. Ищи ошибки у себя.


 
Набережных С. ©   (2003-07-29 17:25) [5]

>MMax   (29.07.03 04:30)

Извини, я не имел в виду ничего обидного, но вышло неудачно - очень уж большое впечатление произвели приведенные цифры:) Рост памяти имеет место и, насколько я могу судить, связан именно с менеджером. Однока, приведенная величина уж чересчур. Вот сейчас сделал  похожий на твой тест с коннектом через ADO к .mdb. При первом коннекте память выросла примерно с 400кб до 4мб, затем подросла до ~4,5 и стабилизировалась. Могу только повторить, что следует избегать работы с AnsiString. Конфигурация примерно такая-же - W2 Pro, Delphi, студия...и много чего - но это и не особо важно. Боюсь, что все-таки у тебя не все чисто.


 
MMax   (2003-07-31 07:26) [6]

  Спасибо за ответы.
Благодаря ним разобрался с утечкой памяти.

Дело было в менеджере памяти.
Библиотека BORLNDMM.DLL использовалась от Borland C++ Builder 5.

  С корректной библиотекой утечки памяти нет.




Страницы: 1 вся ветка

Текущий архив: 2004.11.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.047 c
9-1089564914
volser
2004-07-11 20:55
2004.11.07
Загрузка текстуры с TPicture или TBitmap


1-1098297101
Anonimus
2004-10-20 22:31
2004.11.07
TPageControl


6-1091875870
начинающий
2004-08-07 14:51
2004.11.07
IP+Name


1-1098455411
MRAk
2004-10-22 18:30
2004.11.07
Drawgrid Как вставить картинку в опр ячейку


9-1089041642
Micke
2004-07-05 19:34
2004.11.07
Split Screen с DelphiX