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

Вниз

освобождение памяти под интерфейс   Найти похожие ветки 

 
cross   (2011-01-04 11:21) [0]

вопрос: А нужно ли следить за памятью используемой интерфейсом? Вот, к примеру, метод в котором юзается интерфес IXMLDOMDocument.

procedure Tlocal_upds_analyzer.local_upds_add(APack: TZIPForge);
var
 pack_hdr, Stylesheet: IXMLDOMDocument;
begin
 pack_hdr := CoDOMDocument;
 try
   pack_hdr_load(APack, pack_hdr);
   Stylesheet := CoDOMDocument.Create;
   try
     stylesheet_load(C_STYLESHEET_LOCAL_UPDS_ADD, Stylesheet);
     try
       pack_hdr.transformNode(Stylesheet);
     except
       raise; { TODO :  }
     end;
     with Flocal_upds.documentElement do
       appendChild(pack_hdr);
   finally
     Stylesheet := nil;
   end;
 finally
   pack_hdr := nil;
 end;

end;

Просмотрел полно примеров, в некоторых, по окончанию пользования интерфейсом сбрасываю его в nil, как в моем методе, в некоторых не сбрасывают. Проверял FastMM"ом, мемори лики, если не сбросить в nil, не фиксируются, занимаемая память вроде как освобождается. Внесите ясность.


 
_Юрий   (2011-01-04 11:59) [1]

Присвоение nil"а приводит к немедленному вызову _Release (и освобождению памяти, если счетчик ссылок достиг нуля и если реализация интерфейса подразумевает автоматическое освобождение).
Если же nil не присваивать явно, тоже самое произойдет по выходу переменной из области видимости (неявный вызов _Release компилятором, и далее аналогично ).
Вот и вся разница


 
KilkennyCat ©   (2011-01-04 12:00) [2]

имхо, следить надо всегда.
а вообще, зависит от кучи факторов. например, от используемого менеджера памяти.


 
cross   (2011-01-04 12:47) [3]

прочитал тут, что если все ссылки на интерфейс потеряны, то память выделенная под интерфейс автоматически освобождается менеджером памяти. Получается, что, чтобы не произошло мемори лика не будет, или я ошибаюсь.


 
KilkennyCat ©   (2011-01-04 12:51) [4]


> память выделенная под интерфейс автоматически освобождается
> менеджером памяти

не совсем так. Она теоретически должна автоматически освобождаться. А вот практически возникают утечки.


 
Ega23 ©   (2011-01-04 13:03) [5]


> то память выделенная под интерфейс автоматически освобождается
> менеджером памяти. Получается, что, чтобы не произошло мемори
> лика не будет, или я ошибаюсь.


Память не освобождается, а вызывается метод _Release
А вот что он там будет делать - это уже твоя забота. Например, вызвать Free.


 
Ega23 ©   (2011-01-04 13:15) [6]


> Присвоение nil"а приводит к немедленному вызову _Release


Кстати, не факт.


 
sniknik ©   (2011-01-04 13:20) [7]

> что если все ссылки на интерфейс потеряны
если реально потеряны, то никакого "автоматически" не может быть. автоматически это только когда плановое закрытие, типа выхода из области видимости о чем писали. т.е. там где не ты, а компилятор то же самое обниление (релиз) сделал. вся разница, ты или компилятор. если потерять то как его искать чтобы это сделать? чудеса не программируются. даже модные сборщики мусора не помогут, т.к. они тоже работают по ссылкам, без ссылки (и ее типа) область памяти не идентифицируема (в основном).


 
KilkennyCat ©   (2011-01-04 13:45) [8]

На мой взгляд, это недостаток ОС. Приложения больше нет - память должна освободиться.



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

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

Наверх





Память: 0.46 MB
Время: 0.003 c
15-1292331262
sosed47
2010-12-14 15:54
2011.03.27
Ошибка пакета компонентов


1-1250522877
Дмитрий Белькевич
2009-08-17 19:27
2011.03.27
Хэлп по поводу хэлперов


3-1255678695
Lanu
2009-10-16 11:38
2011.03.27
Подключение ODAC


2-1293713150
сергей2010
2010-12-30 15:45
2011.03.27
Подскажите...


2-1293995216
mefodiy
2011-01-02 22:06
2011.03.27
Выполнение внешней программы из хранимой процедуры MySQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский