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

Вниз

чем можно заменить 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
2-1155022166
4IZH
2006-08-08 11:29
2006.08.27
программное перемещение указателя мыши


8-1135260332
NailMan
2005-12-22 17:05
2006.08.27
[DShow] Фильтр для настройки яркости и пр.


3-1150723850
Dust
2006-06-19 17:30
2006.08.27
Работа с блобами


2-1154809655
fog
2006-08-06 00:27
2006.08.27
TScrollBox


2-1154672198
Reng
2006-08-04 10:16
2006.08.27
Прогммма сервер не отвечает