用C#解析XML相信大家都没问题的,可是有没有遇到过XML文件很大的情况呢,像我就遇到了一个,读取一个 142MB 的大XML文件,这就造成了程序卡死,而且CPU、内存占用过高,
不知道哪位也遇到过类似的问题,有没有解决呢?期望能得到更好的解析方式。

解决方案 »

  1.   

    怎么弄这么大的xml,能不能分开保存呢?
    拆成1M左右的xml小文件读取多方便142M全部读到内存不卡也够呛
      

  2.   

    142M的XML全部载入内存的话,资源消耗肯定很高了。
    换成数据库方式,有选择地或分批读取数据,不要一次性全部读到内存。
      

  3.   

    我的哥啊,你那XML文件咋搞出来的。
      

  4.   

    这么大的文件不合理啊
    建议分解XML
      

  5.   


    哎,这XML也不是我写的,是一个WebService 提供的数据链接(不是WebService),通过这个XML去取远程的数据,所以需要解析。可是已解析就卡死了,用现成还是会使内存占用过高,郁闷啊。
    望有有更好的方法出现,谢谢。
      

  6.   

    x.xml创建x.xsd,然后转成x.cs可以通过x.cs操作x.xml
      

  7.   

    若遠程數據變動不大的話,可以寫個Batch控制台程式將XML數據解拆分或將其存入數據庫.
    Batch定時跑(每天/每小時)這樣可能會好點
      

  8.   

    如果用dom是存在这个问题,可以考虑不用dom
      

  9.   

    数据变动不大,大概一周更新一次,但是每次都会有这么大的XML啊。
      

  10.   


    那应该你不用一次把所有的数据读入内存。我的意思, 比如文档结构是:<root>
     <data>
        <columns><columns>
     </data>
     <connstring></connstring>
    </root>
    考虑用
    XmlDocument xmlDoc=new XmlDocument(); 
    XmlNode root=xmlDoc.SelectSingleNode("connstring");只读取自己需要的部分, 不从根结点读取
      

  11.   

    你在你本地建一个XML文件,把那个文件复制过来,然后再解释吧!这样估计会好点!
      

  12.   

    XmlDocument xmlDoc=new XmlDocument();  
    XmlNode root=xmlDoc.SelectSingleNode("connstring");
    这种方法我用了的,要取的是大部分数据,所以也很卡的,关键数据量太大了
    XML节点倒不是很深。
      

  13.   

    你单独做一个程序,专门去分析他的xml文件,把分析结果放到另几个(比较小的)xml文件里
    你的主程序在读这些小的xml文件
      

  14.   

    程序无所谓的,就是把XML中的数据保存到数据库而已,没别的。
    XML太大了,没东西能打得开啊(记事本打开就死了),只要读取一次,而且不占用内存太高就行了...
      

  15.   

    只能是专门写个WINFORM程序去定时开启,然后读取数据存到数据库,可以的话把你XML文件贴出来看看
      

  16.   

    搞定,用XmlReader 完全不卡,很好,谢谢大家~!!结贴
      

  17.   

    都说了那么久才有反应这个不是像dom一样一次性加载的,读多少加载多少,读大文件绝不会卡
      

  18.   

    呵呵,谢谢啦。
    不过有点新问题,这个XML中的数据包含网址,在网址中含有 & 字符,读取就出错了,难道要替换?
      

  19.   

    &应该需要用字符实体来代替的,好像是&amp
      

  20.   

    这多麻烦啊,100 多兆的数据,一个个替换,那也不好办啊,可是别人提供的XML就是这样了...
    有没有高效的替换方式,或者让 & 字符可以正常解析?