Здравствуйте,с Днём Победы всех!
У меня следующий вопрос:считываю данные из 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.Есть ли способ улучшить перформанс,и есть ли надежда что на реальном борде будет ощутимо лучше?Спасибо.
Здравствуйте, Artem, Вы писали:
A>Здравствуйте,с Днём Победы всех! A>У меня следующий вопрос:считываю данные из XML файла,(создан из Аксессовской таблицы,чуть больше 500 записей).Вот фрагмент кода:
A>А проблемма в том что всё это работает очень медленно,даже учитывая то что код бежит на эмуляторе для WinCE 5.Есть ли способ улучшить перформанс,и есть ли надежда что на реальном борде будет ощутимо лучше?Спасибо.
Profile'ровать надо и смотреть что конкретно ест время, а потом уже оптимизировать... Можешь также задать вопрос маленько по-другому, например "у меня есть структура документа такого-то вида, мне необходимо быстро получить доступ к таким-то таким-то полям, как это лучше сделать?". А то из кода это все не очень понятно
Может быть Вам лучше воспользоваться XPath нежели шариться по GetNodeByTagName (что эквивалентно инструкции "//myNode", которая сама по себе не слишком быстрая), а потом еще проверять на наличие детей?
Что-нить вроде
l_oNodeList = l_oDOM.SelectNodes( "/xml/myNode[count(*) > 0]")
Это если Вы хотите все ноды с какими нибудь детьми.
Здравствуйте, B0rG, Вы писали:
BG>Здравствуйте, Artem, Вы писали:
BG>Может быть Вам лучше воспользоваться XPath нежели шариться по GetNodeByTagName (что эквивалентно инструкции "//myNode", которая сама по себе не слишком быстрая), а потом еще проверять на наличие детей?
BG>Что-нить вроде BG>l_oNodeList = l_oDOM.SelectNodes( "/xml/myNode[count(*) > 0]")
BG>Это если Вы хотите все ноды с какими нибудь детьми.
Спасибо,попобую обязательно,хотя я уже нашёл у себя в коде кривоту и сейчас всё работает боле-менеЕщё один вопрос,если можно:насколько я понимаю,память занимает сам DOMDocument,все же остальные нахлобучки являются просто функционалами.Так ли это?Спасибо.
Здравствуйте, Artem, Вы писали:
A>Спасибо,попобую обязательно,хотя я уже нашёл у себя в коде кривоту и сейчас всё работает боле-менеЕщё один вопрос,если можно:насколько я понимаю,память занимает сам DOMDocument,все же остальные нахлобучки являются просто функционалами.Так ли это?Спасибо.
Не очень понимаю вопрос, если честно...
DOM по определению медленне и жирнее чем SAX/XmlReader подход, потому как весь документ загружается в память, парсится и все такое. Sax похож на event based model — т.е. пошаговое считывание и процессинг.
Здравствуйте, B0rG, Вы писали:
BG>Здравствуйте, Artem, Вы писали:
A>>Спасибо,попобую обязательно,хотя я уже нашёл у себя в коде кривоту и сейчас всё работает боле-менеЕщё один вопрос,если можно:насколько я понимаю,память занимает сам DOMDocument,все же остальные нахлобучки являются просто функционалами.Так ли это?Спасибо.
BG>Не очень понимаю вопрос, если честно... BG>DOM по определению медленне и жирнее чем SAX/XmlReader подход, потому как весь документ загружается в память, парсится и все такое. Sax похож на event based model — т.е. пошаговое считывание и процессинг.
Под нахлобучками имелись в виду объекты того же DOM(IDOMNodeList,IDOMNode etc).А где я могу взять SAX/XmlReader и работает ли это под WinCE?
Здравствуйте, B0rG, Вы писали:
BG>Здравствуйте, Artem, Вы писали:
BG>Ну да, как раз нахлобучки они и есть
BG>А вот по второму вопросу честно сказать понятия не имею. XmlReader — это из дотнета.