解决方案 »

  1.   

    试试tinyxml,在pc上写10万数据需要8秒左右。
      

  2.   

    文件拆分成多个,2到3M有点大, wince上的硬件都比不过桌面硬件
      

  3.   

    pugixml ,很快,用起来也很简单,但是我不知道如何同MFC一起编译
      

  4.   

    2-3M 40秒,这个是有点夸张,直接去CMarkup里面把保存那段代码尝试修改下吧。估计是用CFile直接写的。性能差些。
      

  5.   


    CMarkup中添加的代码中,AddElem是字符串组合成<p1>value</p1>格式,这时是在内存中进行的。
    添加完所有元素时候,再SaveXML()函数保存到路径。
    SaveXML执行时间不长,只有2-4s,关键是前面的添加元素之类的时间消耗很长,但这时是在内存中操作的啊!
      

  6.   

    我直接使用字符串拼接的方式,如
    //修改当前节点子项的内容,没有则添加子项
    void CXMLFiles2::ModifySubItem(const CString paramName, const CString paramValue)
    {
        m_content += _T("<");
        m_content += paramName;
        m_content += _T("<![CDATA[");
        m_content += _T("]]></");
        M_content += paramValue;
        m_content += _T(">");
    }最后完成时使用CFile保存字符串m_content ,发现用的时间还是有14~20s。其中字符串拼接的过程耗时最大,最后保存时间较少。
    不知道是写文件本来就这么慢,还是程序的问题??
      

  7.   

    我用的是MSXML2,感觉速度还可以
      

  8.   


    请问这是在wince下测试的么?
    CMarkup在XP下运行速度还是很快的,但到了wince下就慢的很了
      

  9.   

    请问这是在wince下测试的么?
    CMarkup在XP下运行速度还是很快的,但到了wince下就慢的很了
      

  10.   

    rapidxml或者tinyxmlrapidxml内存分配需要自己管理,但是速度比tinyxml快.
      

  11.   


    rapidxml操作确实快了很多啊,但是最后一步保存该怎么写啊,慢死了!std::ofstream out(filename);
    out << *doc;
    out.close();/*
    结果:
    总共耗时:30.4s
    保存耗时:29.9s
    */std::string text;  
    rapidxml::print(std::back_inserter(text), *doc, 0); /*
    结果:
    总共耗时:66.4s
    保存耗时:65.7s
    */XML最后大小2.32MB,参数10800个
      

  12.   

    你是说std::string text;  
    rapidxml::print(std::back_inserter(text), *doc, 0); 
    这一步用了60多秒??
      

  13.   


    是啊!就是这里很慢的!
    我看了源码,发现在print这里,它才开始循环所有的节点生成XML字符串。所以速度很慢。
      

  14.   

    最后使用内存映射+XML的方式搞定了。结贴!