为什么XmlDocument.Load("internet上的xml文件")会很慢呢?
而用浏览器直接打开"internet上的xml文件"会很快,是不是.net加载xml组件慢的原因?
而用浏览器直接打开"internet上的xml文件"会很快,是不是.net加载xml组件慢的原因?
解决方案 »
- 请教一个分组算法
- 如果跨项目读取配置文件?
- 对称加密的解密问题,在.Net下解密用Java加密的数据
- 请问与vs2005简体中文版集成的UML工具是什么,能自动生产VB(或C#)代码和同步修改吗?
- javascript和this.SmartNavigation=true冲突?怎么解决呢?
- byte数组 与 char数组 互相转换问题?
- C# WINFROM 如何实现程序预载提示
- help!!!!!!!!!!!!!!!!!
- 如何列出所有可用的数据库服务器?
- 关于日期计算的问题
- 如何判断当前程序执行的是Console Application 还是 Windows Application.
- 求解决方案(数据库)
--将xml文件里面的所有内容转化成字符串xmlStr传递到LoadXml函数中,然后就可以在doc XML文档对象中任意操作了!
doc.LoadXml("");
把远程XML文件写到本地,再进行XML读取
应该是缓存的影响。 XmlDocument.Load的确大文件效率低,10秒的时间有点长了。
大文件尽量用read.
第二次用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。
//winFrom程序
var xDocumentTest = XDocument.Load("http://ylzj.91.tc/test.xml");
MessageBox.Show(xDocumentTest.Root.Element("data").Value);//执行到这需要10秒左右
//xml文件大小不到1K
xmlDoc.Load("http://ylzj.91.tc/test.xml");
MessageBox.Show(xmlDoc.SelectSingleNode("//datas/data").InnerText);首次ie打开很慢貌似网络也不是很稳定,发现每次vs 打开都很快强烈怀疑ie缓存导致了你对性能理解的偏差,建议每次打开都用ctrl+f5刷一下...
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("http://ylzj.91.tc/test.xml");
Response.Write(xmlDoc.SelectSingleNode("//datas/data").InnerText); asp.net测试了一下!很快!!
//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毫秒
我说的是在winForm中第一次电击按钮时加载慢,第二次时就很快了,这个是为上门,是不是在winForm .net环境下使用xml它要加载什么使得第一次加载变慢?
在你设计的测试用例中,我感觉
winForm比webform ,多了比较耗时一步就是建立网络连接.而浏览器(ASP.NET)中,已经不需要网络连接的验证耗时.
再加载一个网络上的xml文件还是慢这个证明了不是程序加载xml组件或其它组件而影响了加载速度正如#24楼所说的建立网络连接的验证耗时影响了加载的时间