Главная страница
    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.036 c
14-1097830210
AlexG
2004-10-15 12:50
2004.11.07
Мультизагрузка, WinXP и Win2000...


3-1097312850
Samick
2004-10-09 13:07
2004.11.07
table1.Locate( Текст ,123,[])


4-1096535278
bSava
2004-09-30 13:07
2004.11.07
NT аутентификация


1-1098634662
DIS
2004-10-24 20:17
2004.11.07
работа с реестром


14-1098206590
VID
2004-10-19 21:23
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский