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

Вниз

чем можно заменить TXMLDocument?   Найти похожие ветки 

 
Dysan ©   (2006-08-03 15:35) [0]

обнаружил что происходят утечки памяти при использовании XML интерфейсов, т.к. создаю обьекты типа TXMLDocument
не в дезигн-тайме, то использую его интерфейс IXMLDocument.
не посоветуете чем заменить дельфёфский XML парсер ?


 
Kolan ©   (2006-08-03 15:39) [1]

С XML я не работал, но сильно сомневаюсь что дело в нем... На пустом проекте проверял? И код дай как создаешь - удаляешь...


 
Dysan ©   (2006-08-03 15:47) [2]


var
xml:IXMLDocument;
begin
xml:=TXMLDocument.Create(nil); - создал
xml:=nil; - удалил

а решил я так потому что прикрутил альтернативный манагер памяти и он при запуске программы выдает такую мессагу
http://magistral-rw.ru/pub/pic1.jpg


 
Kolan ©   (2006-08-03 15:52) [3]

И это
> http://magistral-rw.ru/pub/pic1.jpg

в новом проекте?

Хотел попробовать, но Undeclared identifier: "IXMLDocument" XMLDoc подключил, что еще надо?


 
Плохиш ©   (2006-08-03 15:53) [4]


> Dysan ©   (03.08.06 15:47) [2]
>
> var
> xml:IXMLDocument;
> begin
> xml:=TXMLDocument.Create(nil); - создал
> xml:=nil; - удалил

Да, что ты такое говоришь, обнилил ссылку, а объект остался. Объекты удаляются в делфи вызовом деструктора.


 
Dysan ©   (2006-08-03 16:32) [5]

а нету у IXMLDocument метода Free или Destroy !
как удалить по другому я не знаю, но кажеться когда то давнол спрашивал мне именно так и сказали его удалять!


 
Dysan ©   (2006-08-03 16:33) [6]

нужно еще подключить XMLIntf


 
alles ©   (2006-08-03 17:29) [7]

Можно по другому сделать. Пример ф-ий из рабочего проекта
Function  LoadXMLFromFile(FileName:ShortString):Variant;
begin
if FileExists(FileName) then
      begin
        Result := CreateOleObject("Microsoft.XMLDOM");
        Result.load(FileName);
        if Result.parseError.reason <> "" then
           begin
                 ShowMessage("Error load XML:""admInf.~xml"".Error: "+Result.parseError.reason);
                 exit;
           end;
      end;    
end;

можно тут прочитать про это
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/b9f053cf-84cf-4a1c-9d7e-b3aabf9830a2.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/4ead2a13-de31-487e-b826-53f132f25cbb.asp


 
alles ©   (2006-08-03 17:31) [8]

тут показывают как бегать по XML -у
http://www.codenet.ru/progr/delphi/stat/delphi_xml.php


 
palva ©   (2006-08-03 17:52) [9]

Плохиш ©   (03.08.06 15:53) [4]
Объект с интерфейсами удаляется сам, когда обнуляется счетчик ссылок на интерфейс. См. реализацию метода _Release в объекте TInterfacedObject - там есть обращение к Destroy. Можно запустить такую программу и посмотреть, как это работает:

{$APPTYPE CONSOLE}
type
 IC = interface
   procedure P1;
 end;

 CC = class(TInterfacedObject, IC)
   procedure P1;
   destructor Destroy; override;
 end;

 procedure CC.P1;
 begin
   WriteLn("CC.P1")
 end;

 destructor CC.Destroy;
 begin
   Writeln("Destroying");
   Inherited Destroy;
 end;

var
 ic1: IC;
 cc1: CC;  
begin
 cc1 := CC.Create;
 ic1 := cc1;
 ic1.P1; // печатает CC.P1
 ic1 := Nil; // печатает Destroying
 cc1.Free; // Exception увы
end.


 
Плохиш ©   (2006-08-03 19:16) [10]


> palva ©   (03.08.06 17:52) [9]

Да, в справке по TXMLDocument об этом написано, но у человека, по его словам, память не освобождается, значит где-то он вводит нас в заблуждение.


 
palva ©   (2006-08-03 20:32) [11]

Возможно где-то осталась необнуленная ссылка... Если Destroy срабатывает без исключения, то, наверно, таким образом и можно побороться с утечкой памяти, хотя лучше найти ошибку.



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

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

Наверх





Память: 0.47 MB
Время: 0.056 c
15-1154287733
GanibalLector
2006-07-30 23:28
2006.08.27
Отображение картинок...


1-1152541631
LeXaXaXa
2006-07-10 18:27
2006.08.27
Как перехватить сообщение закрытия окна?


1-1152790476
Rater1
2006-07-13 15:34
2006.08.27
dde после выполнения макроса не сбрасывает флаг waitstat


2-1155058563
koha
2006-08-08 21:36
2006.08.27
Зацените прогу


9-1133498299
Fosgen
2005-12-02 07:38
2006.08.27
"Ошибка перечисления" из-за чего может возникать?





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