Форум: "Начинающим";
Текущий архив: 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.038 c