1

xsd.exe を使用して Class を生成する XML スキーマを取得しましたFooClass

ホストから xml リクエストを受信して​​います。これをディレクトリから取得し、 を使用しXmlSerializer.Deserialize()て .xml のインスタンスを取得しますFooClass

さて、これは今まで完全に機能し、今でも機能していますが、突然、より大きな XML ファイル (約 300KB) を取得するようになり、時間がかかりすぎてDeserialize()受け入れられません! 同じ XML ファイルの読み込みにXMLTextReader()は数ミリ秒かかり、逆シリアル化にかかる時間は約 1 分 30 秒です。

そこで、XMLReader を使用して XML ファイルを読み取り、FooClass自分でビルドしようと思いました。しかし、すべてのコードを作り直す前に、XmlSerializer.Deserialize()より高速な使用方法があるかどうかお尋ねしたいと思います。

XMLSerializer Assembly がここで役立つかどうかはわかりません。

ここに、各ファイルのループで呼び出される私のコードがあります

using (MemoryStream ms = new MemoryStream(xmldata)
{
   XmlSerializer sz = new XmlSerializer(typeof(FooClass));
   foo = (FooClass)sz.Deserialize(ms);
} 

前もってありがとう、AK

4

1 に答える 1

0

DataContractSerializer.NET 3.5の新機能を試しましたか? 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; }
}
于 2010-03-10T12:15:05.800 に答える