CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

xml读取速度很慢怎么办?

楼主cnwolfs(cnwolfs)2006-10-08 22:50:38 在 .NET技术 / C# 提问

我从PC的数据库中导出一个XML文件,大约8MB  
   
  在PPC中,使用DataSet的ReadXML,读取这个文件需要3分钟左右,时间太长了,如何才能够加快速度?  
   
   
  请问能否把PC机种的DataSet直接系列化,然后到PPC中再还原过来处理?如果行的话,该如何处理?  
   
   
   
  问题点数:100、回复次数:28Top

1 楼myminimouse(坚决不用baidu)回复于 2006-10-08 23:21:44 得分 0

沙发~Top

2 楼stickking()回复于 2006-10-09 07:28:57 得分 10

你要完成的功能是两台服务器之间数据库的同步是吧?  
    使用xml文件做中介可以,但DataSet方式对于大文件肯定慢,因为它要将整个文件拷贝到内存中处理,使用XmlDataReader的方式对于大小文件效率都比较高,虽然它只能向前、只读,但是作为你同步服务器的问题足够了。  
    给个例子  
    <%@   Import   Namespace="System.Xml"   %>  
    <SCRIPT   runat='server'>  
     
    Sub   Page_Load(Sender   As   Object,   e   As   EventArgs)  
        Dim   xr   As   New   XmlTextReader(Server.MapPath("books.xml"))  
        Dim   bTitle   As   Boolean  
     
        While   xr.Read()  
          Select   Case   xr.NodeType  
            Case   XmlNodeType.Element  
              If   xr.Name   =   "TITLE"   Then  
                bTitle   =   True  
              End   If  
     
            Case   XmlNodeType.Text  
              If   bTitle   Then  
                Response.Write("Book   title:   "   &   xr.ReadString)  
                bTitle   =   False  
              End   If  
          End   Select  
        End   While  
    End   Sub  
    </SCRIPT>  
    来源于:Visual   Basic&#174;   .NET   Developer's   Guide   to   ASP   .NET,   XML   and   ADO.NET  
     
    希望对你的问题有帮助。Top

3 楼cnwolfs(cnwolfs)回复于 2006-10-09 12:14:38 得分 0

二者之间的速度差别多大?  
  Top

4 楼zhangkunls(小憨)回复于 2006-10-09 12:41:10 得分 0

XmlDataReaderTop

5 楼stickking()回复于 2006-10-09 12:45:57 得分 0

速度差别,xml文件不大,没什么差别,如果xml文件很大几十上百M,DOM方式(dataset)会很慢,程序被拖垮也说不定,而Reader方式xml文件大小基本没什么限制。  
  对了,你可以测一下的啊。Top

6 楼xingyaohua(邢跃华)回复于 2006-10-09 12:51:37 得分 0

顶Top

7 楼errorlogin(与狼共舞)回复于 2006-10-09 12:55:38 得分 0

DataSet方式不适合PPC  
       
  *****************************************************************************  
  欢迎使用CSDN论坛阅读器   :   CSDN   Reader(附全部源代码)    
  http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.htmlTop

8 楼cancerser(都是混饭吃,记得要结帖)回复于 2006-10-09 13:03:34 得分 10

DataSet是可以序列化的,.net中   几乎所有对象都能序列化  
  参看BinaryFormatter   类  
    Try  
                          formatter.Serialize(fs,   yourDataSet)  
                  Catch   e   As   SerializationException  
                          Console.WriteLine("Failed   to   serialize.   Reason:   "   &   e.Message)  
                          Throw  
                  Finally  
                          fs.Close()  
                  End   Try  
   
                  catch   {}  
  //  
  Dim   ds   As   DataSet  
  Try  
                          Dim   formatter   As   New   BinaryFormatter  
                          ds=   DirectCast(formatter.Deserialize(fs),   DataSet)  
                  Catch   e   As   SerializationException  
                          Console.WriteLine("Failed   to   deserialize.   Reason:   "   &   e.Message)  
                          Throw  
                  Finally  
                          fs.Close()  
                  End   Try  
  //fs   为流Top

9 楼nonocast(如果没有如果)回复于 2006-10-09 13:04:43 得分 10

http://www.codeproject.com/csharp/XmlAppending.asp  
   
  很久没有回帖了,呵呵  
  hope   it   helpsTop

10 楼foyuan(暴走零零漆)回复于 2006-10-09 13:18:55 得分 0

用流方式读取应该快一点吧Top

11 楼sgear(没有不结贴记录)回复于 2006-10-09 13:36:11 得分 0

dataset.readxml(路径);  
   
  也很快。。Top

12 楼jedliu(21世纪什么最贵? 人才!)回复于 2006-10-09 13:50:39 得分 10

DataSet可以序列化。  
  如果你不喜欢,可以通过DataSet的ReadXml来得到,当然,为了提高速度,可以先读取文件内容的结构,  
  string   strData="";//字符串或者文件路径  
  using   (StringReader   readSchema   =   new   StringReader(strData))  
  {  
  ds.ReadXmlSchema(readSchema);  
  }  
  然后再读取,  
  using   (StringReader   readXml   =   new   StringReader(strData))  
  {  
  ds.ReadXml(readXml,   XmlReadMode.IgnoreSchema);  
  }  
  Top

13 楼free_wang()回复于 2006-10-09 18:18:41 得分 0

顶吧Top

14 楼test33(隐姓埋名)回复于 2006-10-09 21:41:29 得分 0

晕了`Top

15 楼enutter(The Notorious G.W.W.)回复于 2006-10-09 23:31:19 得分 0

你可以试一下在读入xml前,先在Dataset中创建好DataTable,和DataTable的列.   然后用IgnoreShema   模式读入那个xml文件.  
   
   
  Top

16 楼cnwolfs(cnwolfs)回复于 2006-10-10 10:05:46 得分 0

如何系列化?  
   
  系列化能够加快速度吗?  
   
  PC中的DataSet和PPC中的DataSet相同不  
   
  Top

17 楼cho__cho(业精于勤,慌于嘻!行成于思,毁于随!)回复于 2006-10-10 10:09:01 得分 0

 
  MArkTop

18 楼cnwolfs(cnwolfs)回复于 2006-10-10 11:05:36 得分 0

先读取文件内容的结构    
   
  这个方法提升不了什么,测试过了Top

19 楼sayigood(sayigood)回复于 2006-10-10 11:09:06 得分 0

不可能,提前读取应该没问题,你的处理方式可能有问题!Top

20 楼cnwolfs(cnwolfs)回复于 2006-10-10 12:01:54 得分 0

XmlTextReader   读取的时候几乎不要花费时间,但是后期处理量太大,还是不适用  
   
  Top

21 楼cnming(cnming)回复于 2007-01-06 10:27:11 得分 60

PPC中的硬件设备速度跟不上,不可能提高多少,主要要减少XML的个头大小,例如不要导的数据别导,另外,架构字段尽量小,也就是定义更短的字段长度和表名长度  
   
  Top

22 楼dqjia(从头再来)回复于 2007-01-06 11:01:54 得分 0

你先把表结构建好再读取肯定在几秒中内搞定,我试过Top

23 楼runrunrun(农妇、山泉、有点田)回复于 2007-01-06 11:09:22 得分 0

用SAXTop

24 楼smartstar2005()回复于 2007-01-06 12:52:19 得分 0

读取超过2M的XML文件就会很慢,楼主可以试一下把它分成几个文件看能不能快点.Top

25 楼sdl2005lyx()回复于 2007-01-06 15:04:39 得分 0

关注!!!Top

26 楼jason_mf()回复于 2007-01-06 16:48:18 得分 0

为什么不把PC数据库和SQL   Mobile同步呢?让后PPC上直接读sql   mobile不是更好。Top

27 楼heartdevil(困兽)回复于 2007-01-06 22:19:42 得分 0

XmlDataReader是一种可行的办法,不过你不好做后期的处理。你再传输数据的时候,有没有经过压缩处理啊?压缩于不压缩的差别,可能有一个数量级的差别啊。Top

28 楼heartdevil(困兽)回复于 2007-01-18 09:24:40 得分 0

jedliu(21世纪什么最贵?   人才!),说的是对的.不要用默认模式,你直接用ReadXml就是默认模式,如果有schame的话,最好用特定模式读取。  
  在读取之前用BeginLoadData()方法关闭通知,索引,维护等,在ReadXml读取完毕后,在调用EndLoadData()来打开通知,索引,维护。Top

相关问题

关键词

得分解答快速导航

  • 帖主:cnwolfs
  • stickking
  • cancerser
  • nonocast
  • jedliu
  • cnming

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo