Wie Josh sagte, dies ist eine Mikro-Optimierung, die Sie nicht einmal in Betracht ziehen sollten, wenn Sie seine Notwendigkeit nicht bewiesen haben. Es ist auch wirklich nicht schwierig zu testen:
static void Main(string[] arguments)
{
const int iterations = 100000;
Stopwatch sw = new Stopwatch();
sw.Start();
string s = CreateUsingStringBuilder("content", iterations);
sw.Stop();
Console.WriteLine(String.Format("CreateUsingStringBuilder: {0}", sw.ElapsedMilliseconds));
sw.Reset();
sw.Start();
s = CreateUsingXmlWriter("content", iterations);
sw.Stop();
Console.WriteLine(String.Format("CreateUsingXmlWriter: {0}", sw.ElapsedMilliseconds));
Console.ReadKey();
}
private static string CreateUsingStringBuilder(string content, int iterations)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < iterations; i++)
sb.AppendFormat("<element>{0}</element>", content);
return sb.ToString();
}
private static string CreateUsingXmlWriter(string content, int iterations)
{
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
using (XmlWriter xw = XmlWriter.Create(sw))
{
xw.WriteStartElement("root");
for (int i = 0; i < iterations; i++)
xw.WriteElementString("element", content);
xw.WriteEndElement();
}
return sb.ToString();
}
Nicht nur die XmlWriter
Version ist konsequent schneller von einer Millisekunde oder zwei, es produziert wohlgeformte XML, die die andere Methode nicht.
Aber beide Methoden erstellen XML-Dokumente mit 100.000 Elementen in etwa 60 Millisekunden auf meinem zwei Jahre alten Laptop, eine Zeit, die im Vergleich zu der Zeit, die benötigt wird, um so viele Daten über das Netzwerk zu übertragen, an Bedeutungslosigkeit verliert .
Awesome Job. Ich tat genau das Gleiche an meiner Maschine und kam hierher zurück, um die Ergebnisse zu posten, aber du hast mich geschlagen. Meine Ergebnisse sind im Wesentlichen die gleichen wie das, was Sie gefunden haben. +1 – Josh
Ich stimme zu, dass XmlWriter besser ist, aber wenn wir über Optimierung sprechen, String.Format ist kein Weg zu gehen. sb.Append ("") .Append (Inhalt) .Append (" "); macht die StringBuilder-Version 2,5-mal schneller als die andere. –