为什么XmlDocument.Load("internet上的xml文件")会很慢呢?
而用浏览器直接打开"internet上的xml文件"会很快,是不是.net加载xml组件慢的原因?

解决方案 »

  1.   

    而用浏览器直接打开"internet上的xml文件"会很快同样的文件?? 浏览器还会有缓存..这个不一定的
      

  2.   

    同样的文件XmlDocument.Load需要10秒,ie一妙不到,不过当你XmlDocument.Load了以后你在调用XmlDocument.Load去加载同一个xml就会很快了,这个是为什么?
      

  3.   

    不会慢的,试试这个函数吧!doc.LoadXml(string xmlStr)
    --将xml文件里面的所有内容转化成字符串xmlStr传递到LoadXml函数中,然后就可以在doc XML文档对象中任意操作了!
      

  4.   

    XmlDocument   doc=   new   XmlDocument();   
    doc.LoadXml("");
    把远程XML文件写到本地,再进行XML读取
      

  5.   

    同样的文件XmlDocument.Load需要10秒,ie一妙不到,不过当你XmlDocument.Load了以后你在调用XmlDocument.Load去加载同一个xml就会很快了,这个是为什么?jit的问题?不一定啊...怀疑你是因为ie缓存问题,或者是jit的首次访问问题,否则不会有很大差距的...
      

  6.   

    XmlDocument.Load了以后你第二次调用XmlDocument.Load去加载同一个xml就会很快了.
    应该是缓存的影响。 XmlDocument.Load的确大文件效率低,10秒的时间有点长了。
    大文件尽量用read.
      

  7.   

      用IE直接访问时,首次访问需要的时间较长,服务器的XML文件会全部传输到客户端,首次加载完后IE会缓存该XML文件。
      第二次用IE访问时,会将本地缓存的文件的时间与服务器的文件时间对比,如果是相同的话,则直接加载本地的XML文件,而不将服务器的XML文件全部传输到客户端。
      如果XML文件大小为50KB,则第一次用IE访问时,客户端与服务器端交互需要发送50多KB大小流量,而第二次访问时,只需要发送0.2KB左右的验证停息流量。两者差别是很大的,这一点一定要清楚。
      为什么用JS做XmlDocument.Load操作每次都需要这么长时间,因为通过这种方式操作,IE是不缓存的。就像ASPX页面的传输一样,每次请求客户端与服务器端都需要传送页面本身容量大小的通信。所以每次做Load操作时,程序都会通过网络将远地的XML文件加载到本地,因为程序本身不缓存,IE也不能缓存这样的动态加载,所以每次的加载的速度都会有50多KB的通信流量。
      如何避免这种情况呢?
      看看下面这个解决方案:
      1.在页面中通过关联文件的方式来操作:
        即通过文件引用的方式来做,将远地的XML文件以文件的方式关联到本页面中,类似于引用.css样式表的文件操作差不多。然后通过JS获取关联文件的内容。然后再作解析。
        这样首次加载后,IE就会识别,并将该XML文件缓存。首次访问时速度会慢,第二次就快了。  最后解答一下为什么你说用IE访问很快。其实事实应该不是像你所说的,首次访问时应该还是会稍慢的。你所感觉的快,只是因为IE已经缓存的原因。如果你做个测试就知道了:将你的IE中的COOKIE和其它缓存文件全部删除,然后再访问那个地址看一下,需要的时间肯定不止1秒,但当你第二次访问时,可能1秒就够了。
      
      需要了解这些知识,必须深入ASP.NET的实现机制和IE浏览器的实现原理。可参照MSDN。
      

  8.   


    //winFrom程序
     var xDocumentTest = XDocument.Load("http://ylzj.91.tc/test.xml");
     MessageBox.Show(xDocumentTest.Root.Element("data").Value);//执行到这需要10秒左右
    //xml文件大小不到1K
      

  9.   

    XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("http://ylzj.91.tc/test.xml");
                MessageBox.Show(xmlDoc.SelectSingleNode("//datas/data").InnerText);首次ie打开很慢貌似网络也不是很稳定,发现每次vs 打开都很快强烈怀疑ie缓存导致了你对性能理解的偏差,建议每次打开都用ctrl+f5刷一下...
      

  10.   

    MS没发现慢!!
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("http://ylzj.91.tc/test.xml");
           Response.Write(xmlDoc.SelectSingleNode("//datas/data").InnerText); asp.net测试了一下!很快!!
      

  11.   

    用asp.net的时候同样的代码就是比winForm程序快,这个又是为什么?是不时asp.net服务器启动的时候已经加载了xml组件?
      

  12.   

    ....苍天,我也是winform测试的...你这个快与慢都是怎么得到的啊....
      

  13.   


    //winForm中在button单击事件中测试代码:
     private void button6_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Stopwatch sto = new System.Diagnostics.Stopwatch();
                sto.Start();
                XDocument xmlDoc = XDocument.Load("http://ylzj.91.tc/test.xml");
                sto.Stop();
                MessageBox.Show(xmlDoc.Root.Element("data").Value+"\r\n" + sto.ElapsedMilliseconds.ToString()); 
            }
    //asp.net在pageLoad事件中测试代码如下:
     protected void Page_Load(object sender, EventArgs e)
        {
            System.Diagnostics.Stopwatch sto = new System.Diagnostics.Stopwatch();
            sto.Start();
            XDocument xmlDoc = XDocument.Load("http://ylzj.91.tc/test.xml");
            Response.Write(xmlDoc.Root.Element("data").Value); 
            sto.Stop();
            Response.Write("<br />"+sto.ElapsedMilliseconds.ToString()); 
        }
    //运行结果是:
    //winForm需要30277毫秒
    //asp.net只需要147毫秒
      

  14.   

    相同的机器上,相同的带宽。
    我说的是在winForm中第一次电击按钮时加载慢,第二次时就很快了,这个是为上门,是不是在winForm .net环境下使用xml它要加载什么使得第一次加载变慢?
      

  15.   

    winForm中第一次电击按钮时加载了一个System.Configuration.dll,也许是因为这个慢了点吧
      

  16.   


    在你设计的测试用例中,我感觉
    winForm比webform ,多了比较耗时一步就是建立网络连接.而浏览器(ASP.NET)中,已经不需要网络连接的验证耗时.
      

  17.   

    如果都已经建立好网络连接(主要是扣除硬件接通耗时),你再换另一个网址的XML加载,winform和webform加载时间不会象现在这样差距悬珠.
      

  18.   

    测试:用一个XDocument对象加载一个本地的xml文件加载速度快
    再加载一个网络上的xml文件还是慢这个证明了不是程序加载xml组件或其它组件而影响了加载速度正如#24楼所说的建立网络连接的验证耗时影响了加载的时间