Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Corba";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

Утечка памяти 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 вся ветка

Форум: "Corba";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.048 c
1-1098360544
Koala
2004-10-21 16:09
2004.11.07
Вызов формы из dll


14-1098180650
miwa
2004-10-19 14:10
2004.11.07
Как я защищался или Зачем нужно заочное образование.


6-1093466977
Flagman
2004-08-26 00:49
2004.11.07
Читать/писать в определенный порт...


1-1098612951
Aleks
2004-10-24 14:15
2004.11.07
поиск по тексту


9-1089868223
Evgeniy_K
2004-07-15 09:10
2004.11.07
Тетколор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский