如何在Tinyxml中使用Loadfile()加载较大文件时加快速度
在我的项目中,我需要将新数据附加到 xml,所以我这样做: 问题是当 xml 文件很大并且 CPU 较高时,LoadFile() 函数非常慢,SaveFile() 也有同样的问题。那么,我应该如何加快我的项目速度。 谢谢你的帮助:)
TiXmlDocument doc(m_filePath.c_str());
(void)doc.LoadFile(); //here is slowly
if (doc.Error() && (doc.ErrorId()==TiXmlBase::TIXML_ERROR_OPENING_FILE))
{
ATS_LOG(ERROR, "Can not open the file:%s", m_filePath.c_str());
result = false;
}
else
{
const TiXmlHandle docH(&doc);
TiXmlElement* const element = docH.FirstChildElement("HistoryMsgs").Element();
TiXmlNode* const pNode=element->ToElement();
if (pNode!=NULL)
{
//do something that insert new node;
(void)doc.SaveFile(m_filePath.c_str());//here is slowly too
}
}
In my project I need append new data to a xml, so I do it like below:
the question is the LoadFile() funcation is so slowly when the xml file is large, and high-cpu, the SaveFile() have same problem. So, How should I speed up in my project.
Thanks you help:)
TiXmlDocument doc(m_filePath.c_str());
(void)doc.LoadFile(); //here is slowly
if (doc.Error() && (doc.ErrorId()==TiXmlBase::TIXML_ERROR_OPENING_FILE))
{
ATS_LOG(ERROR, "Can not open the file:%s", m_filePath.c_str());
result = false;
}
else
{
const TiXmlHandle docH(&doc);
TiXmlElement* const element = docH.FirstChildElement("HistoryMsgs").Element();
TiXmlNode* const pNode=element->ToElement();
if (pNode!=NULL)
{
//do something that insert new node;
(void)doc.SaveFile(m_filePath.c_str());//here is slowly too
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
TinyXML 有相当多的性能问题。 RapidXML 和 PugiXML 是更优选的。我不确定将代码移植到新的解析器有多容易,但我曾经使用 TinyXML 遇到过性能问题,然后切换到 PugiXML。您可以查看有关 C++ 解析器的讨论:
适用于 C++ 的最佳开放式 XML 解析器是什么?
TinyXML has quite some performance issues. RapidXML and PugiXML are more preferred. I'm not sure how easy would it be to port your code to a new parser, but I had performance issues once with TinyXML and then switched to PugiXML. You might check out a discussion on C++ parsers on:
What is the best open XML parser for C++?