XmlSerializer.Deserialize()对于超过1MB-.Net compact framework 3.5 sp1的文件速度太慢
我得到了一个XML模式,我使用xsd.exe为其生成了一个类XmlSerializer.Deserialize()对于超过1MB-.Net compact framework 3.5 sp1的文件速度太慢,.net,xml,serialization,xmlserializer,.net,Xml,Serialization,Xmlserializer,我得到了一个XML模式,我使用xsd.exe为其生成了一个类FooClass 我从主机接收xml请求,我从目录中获取这些请求,并使用XmlSerializer.Deserialize()获取我的FooClass的实例 好吧,到目前为止,这一切都很好,现在仍然如此,但突然我开始得到更大(约300KB)的XML文件,而且反序列化()所需的时间是不可接受的!使用XMLTextReader()加载同一个XML文件需要几毫秒,反序列化时间约为1分30秒 所以我想我将使用XMLReader来读取XML文件并
FooClass
我从主机接收xml请求,我从目录中获取这些请求,并使用XmlSerializer.Deserialize()
获取我的FooClass
的实例
好吧,到目前为止,这一切都很好,现在仍然如此,但突然我开始得到更大(约300KB)的XML文件,而且反序列化()
所需的时间是不可接受的!使用XMLTextReader()
加载同一个XML文件需要几毫秒,反序列化时间约为1分30秒
所以我想我将使用XMLReader来读取XML文件并自己构建FooClass
!
但是在我开始重新编写所有代码之前,我想问一下是否有一种方法可以使用XmlSerializer.Deserialize()
,哪种更快
我不确定XMLSerializer程序集在这里是否对我有很大帮助
下面是我的代码,它将在每个文件的循环中被调用
using (MemoryStream ms = new MemoryStream(xmldata)
{
XmlSerializer sz = new XmlSerializer(typeof(FooClass));
foo = (FooClass)sz.Deserialize(ms);
}
提前感谢,,
AK您是否在.NET 3.5中尝试了新的
DataContractSerializer
?您使用它的方式与XmlSerializer
几乎相同;我不知道它是否更快,但它比XmlSerializer
有许多其他好处,比如序列化私有成员,不需要无参数构造函数,能够忽略属性等等
using (MemoryStream ms = new MemoryStream(xmldata))
{
DataContractSerializer s = new DataContractSerializer(typeof(FooClass));
FooClass c = s.ReadObject(ms) as FooClass;
}
您将需要将[DataContract]
属性添加到FooClass
的定义中,您不必这样做,但我通过使用[DataMember]
装饰来明确地告诉序列化程序我想要序列化哪些成员
[DataContract]
public class FooClass
{
public string IgnoreThisProperty { get; set; }
[DataMember]
public string SerialiseThisProperty { get; set; }
}
非常感谢您的回复。我还没有使用DataContractSerializer,但如果找不到其他方法,我会尝试使用它!;-)问题是重新设计/装饰FooClass!有没有像xsd.exe这样的工具可以生成一个支持DataContractSerializer的类?如果您需要符合特定的XML模式,DataContractSerializer将不会真正帮助您,因为它让您对文档结构的控制更少。请向您提供更多信息@Thomas-我同意DataContractSerializer不允许对XML进行太多的控制,但是在前面的评论中,它看起来不像海报使用了任何模式,所以这可能就足够了@Gohlool,无需重新设计类,只需将[DataContract]放在类定义上方,[DataMember]放在要(反)序列化的每个属性上方即可。将一个类从XmlSerializer转换为DataContractSerializer需要几秒钟,这取决于它的复杂性以及与其他类的关系。谢谢Andy!我试试看。干杯你确定这是XML而不是模式解析超时吗?谢谢你的提示,但我肯定!因为没有定义外部架构/名称空间!像100KB这样小的XML文件,反序列化的速度可以快到让人目不转睛的LOL。所以,如果要解决这个问题,必须针对所有大小的XML文件!我猜!