XML ファイルを頻繁に作成する必要があり、そのために XmlWrite を選択しました。WriteAttributeString (場合によっては多くの属性を書き込む必要があります) などに多くの時間を費やしていることがわかりました。前もって感謝します。
6 に答える
私が知っている最速の方法は、ドキュメント構造をプレーンな文字列として記述し、XDocument オブジェクトに解析することです。
string str =
@"<?xml version=""1.0""?>
<!-- comment at the root level -->
<Root>
<Child>Content</Child>
</Root>";
XDocument doc = XDocument.Parse(str);
Console.WriteLine(doc);
これで、構造化され、すぐに使用できる XDocument オブジェクトが作成され、データを入力できます。また、完全に構造化されデータが入力された XML を文字列として解析し、そこから開始することもできます。また、次のような構造化された XElements をいつでも使用できます。
XElement doc =
new XElement("Inventory",
new XElement("Car", new XAttribute("ID", "1000"),
new XElement("PetName", "Jimbo"),
new XElement("Color", "Red"),
new XElement("Make", "Ford")
)
);
doc.Save("InventoryWithLINQ.xml");
生成されるもの:
<Inventory>
<Car ID="1000">
<PetName>Jimbo</PetName>
<Color>Red</Color>
<Make>Ford</Make>
</Car>
</Inventory>
たとえば、FileStream
(手動で作成されたコードを介して)ファイルに直接書き込みます。これは非常に高速に作成できますが、維持するのもかなり困難です。いつものように、最適化には賞品のタグが付いています。
また、「時期尚早の最適化は諸悪の根源」であることを忘れないでください。
シリアライズしたいクラスの階層を定義するだけです。それだけです。さらに、プロパティに適用されるいくつかの属性を介してスキーマを制御できます。
ここで述べたように、匿名型を使用して XML にシリアル化することは興味深いアプローチです
どれくらいの時間がかかりますか...10ミリ秒、10秒、または10分ですか...そして、Xmlを書き込むプロセス全体のどれくらいですか?
最適化すべきではないと言っているわけではありませんが、プロセスのわずかな最適化にどれだけの時間を費やしたいかの問題です。結局のところ、この場合、より速く進みたいと思うほど、維持するのがより複雑になります (個人的な意見)。
私は個人的にXmlDocument
タイプを使用するのが好きです。ノードを記述するときはまだ少し重いですが、属性はワンライナーであり、Xmlwrite を使用するよりもずっと簡単です。