xml读取速度很慢怎么办?
我从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® .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




