我现在遇到过这样的一个问题...
是及时数方面的问题...有一个xml文件
里面有3个大的节点,(分别是 创建,删除,修改)
节点里面有近千个小的节点内容,每个大的节点下面都是这样的...我原先的做法是:用一个线程来操作这个xml文件。
先是分析出3个大的节点,然后 用xmlnode在去分析子节点.[注意:每分析一个子节点出来,就要将数据入库...]我现在的思路是这样的:我想用3个线程同时操作这个文件里面的对应的 :create,delete,update 这个3个大节点里面的内容..
但是注意的是 还要判断 最后一个线程操作完它所对应的节点 ,那么这轮读取xml文件才能退出。
才能进入下一轮读取xml文件,
因为每隔接近一分钟就会来一个跟新数据包的xml文件。
我想,用3个线程应该比一个线程快。现在改写的代码里面,3个线程处理这个文件 一直没有弄好...希望给位大侠帮帮忙...xml文件大概内容是这个样子
<?xml version="1.0" encoding="UTF-8"?>
<evjen>
  <subscription-update>
    <odds-model-object-changed typeId="aaa" id="1214033306">
      <properties>
        <property name="a1">2009-09-04 05:34:50.498</property>
        <property name="a2">67.0</property>
      </properties>
    </odds-model-object-changed>
    <odds-model-object-deleted typeId="aaa" id="1215932285"></odds-model-object-deleted>
    <odds-model-object-deleted typeId="aaa" id="1215932278"></odds-model-object-deleted>
    <odds-model-object-created>
      <odds-model-object typeId="aaa" id="1215580620">
        <properties>
          <property name="a3">1.77</property>
          <property name="a4">1</property>
          <property name="a5">2009-09-04 05:35:10.834</property>
        </properties>
      </odds-model-object>
    </odds-model-object-created>
  </subscription-update>
</evjen>如果某个节点不存在,那么负责读取这个节点的线程就退出此次读取...

解决方案 »

  1.   

    这种情况下, 多线程好像并不能比单线程快吧?
    况且, 何必等待这几个线程终止呢? 线程开始以后就让他自己灭亡好了。
    下次来了任务再new 三个线程。
      

  2.   

    三个线程不会比一个线程快,瓶颈不是在通讯上,是xml要加载到内存处理上。
      

  3.   

    瓶颈是这样的
    每隔接近一分钟 就来个300多k的跟新文件
    程序根本不可能在50秒的时间内将数据分析出来然后入库。这样就会造成扎堆的现象,到后来 xml文件越积越多 根本处理不过来...
      

  4.   


    试试webservice ,web上传DataSet,直接入库、存xml,不要第二次分析xml结构。
      

  5.   

    我是从别个服务器上面 下载xml 文件的
      

  6.   

    xml适合小数据,大数据用数据库,
    可以叫对方把xml数据加载到数据库然后传给你的表。在数据库里面处理就很快了。
      

  7.   

    300多K的XML文件不算大啊,怎么会不能在50秒的时间内将数据分析出来然后入库?如果使用DataSet自带的XML序列化处理,1秒钟就读取完毕了,再写入数据库的话,最多再花上几秒钟。
      

  8.   


    楼上说的 是怎么弄的啊???我是用xmldocument来装载xml文件的
      

  9.   

    如果对方也是使用的.NET编写的程序,那么应该可以提供DataSet.WriteXml方法序列化的XML文件,否则就只能使用你上面定义的那种XML格式操作。
    由于你的操作都是只读的,所以不要使用XmlDocument来操作XML文件,那样会很慢,特别是XML文件较大的情况下。你应该使用XPathDocument来创建XPathNavigator来操作XML,由于XPathDocument是只读的,所以创建的XPathNavigator执行效率很高。创建方法参考:XPathDocument doc = new XPathDocument("books.xml");
    XPathNavigator nav = ((IXPathNavigable)doc).CreateNavigator();
      

  10.   

    是这样子的对方提供的是一个压缩包我是从对方服务器下载下来之后,然后再我本地解压缩成xml文件这样能不能用序列化了?如果能用,能不能写点核心的代码谢谢
      

  11.   

    这个文件好像用DataSet没法弄吧?