3

アロハ、

逆シリアル化したい 8MB の XML ファイルがあります。私はこのコードを使用しています:

public static T Deserialize<T>(string xml)
{
    TextReader reader = new StringReader(xml);
    Type type = typeof(T);
    XmlSerializer serializer = new XmlSerializer(type);
    T obj = (T)serializer.Deserialize(reader);
    return obj; 
}

このコードは約 1 分で実行されますが、これはかなり遅いように思えます。sgen.exe を使用してシリアル化 dll をプリコンパイルしようとしましたが、パフォーマンスは変わりませんでした。

パフォーマンスを向上させるには、他にどのようなオプションがありますか?

[編集] (基本的な) 変換を実行するには、逆シリアル化によって作成されたオブジェクトが必要です。XML は外部 Web サービスから受信されます。

4

3 に答える 3

3

XmlSerializer はリフレクションを使用するため、パフォーマンスが問題になる場合は最適な選択ではありません。

XmlDocumentまたはXDocumentクラスを使用して XML ドキュメントの DOM を構築し、それを操作するか、 XmlReader. ただし、XmlReader必要に応じてオブジェクト マッピングを自分で作成する必要があります。

どのアプローチが最適かは、XML データで何をしたいかによって大きく異なります。特定の値を抽出するだけでよいですか、それともドキュメント オブジェクト モデル全体を操作して編集する必要がありますか?

于 2009-02-04T13:28:00.073 に答える
1

「T」クラスに IXmlSerializable を実装して、XML を処理するカスタム ロジックを記述してみてください。

于 2009-05-05T11:23:45.317 に答える