XmlSerializer.Deserialize()对于超过1MB-.Net compact framework 3.5 sp1的文件速度太慢

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文件并

我得到了一个XML模式,我使用xsd.exe为其生成了一个类
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文件!我猜!