XML-нужна помощь!
От: Artem Израиль  
Дата: 09.05.05 10:21
Оценка:
Здравствуйте,с Днём Победы всех!
У меня следующий вопрос:считываю данные из XML файла,(создан из Аксессовской таблицы,чуть больше 500 записей).Вот фрагмент кода:

m_piDOM.CreateInstance(CLSID_DOMDocument);
if(m_piDOM->load(sSource) != VARIANT_TRUE)
{
wsprintf(pBuff,L"Unable to load the %s table \n",sSource);
throw pBuff;
}
m_piDOM->Putasync(FALSE);

////////

pNodeList = m_piDOM->getElementsByTagName(m_sTableName);
for(int i = 0; i < nCount; i++)
{
if(pNodeList->Getlength() == 0L)
{
wsprintf(pBuff,L"Emply NodeList of the %s table\n",m_sTableName);
throw L"Emply NodeList of the %s table\n";
}
pNode = pNodeList->Getitem((long)iIndex);
if(pNode == NULL)
{
wsprintf(pBuff,L"\nUnable to get %d item of %s able",iIndex,m_sTableName);
throw pBuff;
}

pNodeList = pNode->GetchildNodes();
if(pNodeList->Getlength() == 0L)
throw L"\n Empty sub-node list when trying to get PhoneModels item";

pNode = pNodeList->nextNode();
if(pNode == NULL)
throw L"\n Empty sub-node when trying to get PhoneModels::ID";
m_ulID = _ttol(pNode->Gettext().copy());

pNode = pNodeList->nextNode();
e.t.c
}

А проблемма в том что всё это работает очень медленно,даже учитывая то что код бежит на эмуляторе для WinCE 5.Есть ли способ улучшить перформанс,и есть ли надежда что на реальном борде будет ощутимо лучше?Спасибо.
Re: XML-нужна помощь!
От: Nikto Россия  
Дата: 09.05.05 10:46
Оценка:
Здравствуйте, Artem, Вы писали:

A>Здравствуйте,с Днём Победы всех!

A>У меня следующий вопрос:считываю данные из XML файла,(создан из Аксессовской таблицы,чуть больше 500 записей).Вот фрагмент кода:

A>А проблемма в том что всё это работает очень медленно,даже учитывая то что код бежит на эмуляторе для WinCE 5.Есть ли способ улучшить перформанс,и есть ли надежда что на реальном борде будет ощутимо лучше?Спасибо.


Profile'ровать надо и смотреть что конкретно ест время, а потом уже оптимизировать... Можешь также задать вопрос маленько по-другому, например "у меня есть структура документа такого-то вида, мне необходимо быстро получить доступ к таким-то таким-то полям, как это лучше сделать?". А то из кода это все не очень понятно
Re[2]: XML-нужна помощь!
От: Nikto Россия  
Дата: 09.05.05 10:49
Оценка:
Здравствуйте, Nikto, Вы писали:

P.S.: А вообще все это должно очень быстро работать. У меня подобные задачи "летали"...
Re: XML-нужна помощь!
От: B0rG  
Дата: 09.05.05 11:03
Оценка:
Здравствуйте, Artem, Вы писали:

Может быть Вам лучше воспользоваться XPath нежели шариться по GetNodeByTagName (что эквивалентно инструкции "//myNode", которая сама по себе не слишком быстрая), а потом еще проверять на наличие детей?

Что-нить вроде
l_oNodeList = l_oDOM.SelectNodes( "/xml/myNode[count(*) > 0]")

Это если Вы хотите все ноды с какими нибудь детьми.
Re[2]: XML-нужна помощь!
От: Artem Израиль  
Дата: 09.05.05 12:17
Оценка:
Здравствуйте, B0rG, Вы писали:

BG>Здравствуйте, Artem, Вы писали:


BG>Может быть Вам лучше воспользоваться XPath нежели шариться по GetNodeByTagName (что эквивалентно инструкции "//myNode", которая сама по себе не слишком быстрая), а потом еще проверять на наличие детей?


BG>Что-нить вроде

BG>l_oNodeList = l_oDOM.SelectNodes( "/xml/myNode[count(*) > 0]")

BG>Это если Вы хотите все ноды с какими нибудь детьми.


Спасибо,попобую обязательно,хотя я уже нашёл у себя в коде кривоту и сейчас всё работает боле-менеЕщё один вопрос,если можно:насколько я понимаю,память занимает сам DOMDocument,все же остальные нахлобучки являются просто функционалами.Так ли это?Спасибо.
Re[3]: XML-нужна помощь!
От: B0rG  
Дата: 09.05.05 12:20
Оценка:
Здравствуйте, Artem, Вы писали:

A>Спасибо,попобую обязательно,хотя я уже нашёл у себя в коде кривоту и сейчас всё работает боле-менеЕщё один вопрос,если можно:насколько я понимаю,память занимает сам DOMDocument,все же остальные нахлобучки являются просто функционалами.Так ли это?Спасибо.


Не очень понимаю вопрос, если честно...
DOM по определению медленне и жирнее чем SAX/XmlReader подход, потому как весь документ загружается в память, парсится и все такое. Sax похож на event based model — т.е. пошаговое считывание и процессинг.
Re[4]: XML-нужна помощь!
От: Artem Израиль  
Дата: 09.05.05 13:16
Оценка:
Здравствуйте, B0rG, Вы писали:

BG>Здравствуйте, Artem, Вы писали:


A>>Спасибо,попобую обязательно,хотя я уже нашёл у себя в коде кривоту и сейчас всё работает боле-менеЕщё один вопрос,если можно:насколько я понимаю,память занимает сам DOMDocument,все же остальные нахлобучки являются просто функционалами.Так ли это?Спасибо.


BG>Не очень понимаю вопрос, если честно...

BG>DOM по определению медленне и жирнее чем SAX/XmlReader подход, потому как весь документ загружается в память, парсится и все такое. Sax похож на event based model — т.е. пошаговое считывание и процессинг.

Под нахлобучками имелись в виду объекты того же DOM(IDOMNodeList,IDOMNode etc).А где я могу взять SAX/XmlReader и работает ли это под WinCE?
Re[5]: XML-нужна помощь!
От: B0rG  
Дата: 09.05.05 13:38
Оценка:
Здравствуйте, Artem, Вы писали:

Ну да, как раз нахлобучки они и есть

А вот по второму вопросу честно сказать понятия не имею. XmlReader — это из дотнета.
Re[6]: XML-нужна помощь!
От: Artem Израиль  
Дата: 09.05.05 13:45
Оценка:
Здравствуйте, B0rG, Вы писали:

BG>Здравствуйте, Artem, Вы писали:


BG>Ну да, как раз нахлобучки они и есть


BG>А вот по второму вопросу честно сказать понятия не имею. XmlReader — это из дотнета.


Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.