というわけで試してみましょう。
ソースはこちら↓
public void DoTest() {
this.CreateDocumentWithXmlDocument();
this.CreateDocumentWithXDocument();
}
private void CreateDocumentWithXmlDocument() {
Stopwatch sw = new Stopwatch();
sw.Start();
XmlImplementation impl = new XmlImplementation();
XmlDocument doc = impl.CreateDocument();
XmlElement root = doc.CreateElement("root");
doc.AppendChild(root);
for (int i = 0; i < 10000; i++) {
XmlElement item = doc.CreateElement(string.Format("要素_{0:0000}", i));
XmlAttribute attr = doc.CreateAttribute(string.Format("属性_{0:0000}", i));
attr.Value = string.Format("属性値_{0:0000}", i);
item.Attributes.Append(attr);
XmlText text = doc.CreateTextNode(string.Format("要素内容_{0:0000}", i));
item.AppendChild(text);
root.AppendChild(item);
}
sw.Start();
Console.WriteLine("With XmlDocument : {0}", sw.ElapsedTicks);
doc.Save(@"D:\temp\XmlDocument.xml");
}
private void CreateDocumentWithXDocument() {
Stopwatch sw = new Stopwatch();
sw.Start();
XDocument doc = new XDocument();
XElement root = new XElement("root");
doc.Add(root);
for (int i = 0; i < 10000; i++) {
XElement item = new XElement(string.Format("要素_{0:0000}", i));
item.Value = string.Format("要素内容_{0:0000}", i);
XAttribute attr =
new XAttribute(string.Format("属性_{0:0000}", i), string.Format("属性値_{0:0000}", i));
item.Add(attr);
root.Add(item);
}
sw.Start();
Console.WriteLine("With XDocument : {0}", sw.ElapsedTicks);
doc.Save(@"D:\temp\XDocument.xml");
}
んで、結果がコレ(三回分)
・With XmlDocument : 467673, 460969, 470390
・With XDocument : 546143, 579681, 589850
わずかながら、XmlDocument のほうがパフォーマンスいいですね。
まあ、10000回ループさせてこれなら XDocument での XML 生成も全然アリでしょう。
ちなみに XDocument は自動的に XML 宣言を追加してくれました。