Come ha detto Josh, questa è una micro-ottimizzazione che non dovresti nemmeno prendere in considerazione se non hai dimostrato la sua necessità. E 'anche molto difficile da testare:
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();
}
Non solo è la versione XmlWriter
costantemente più veloce per un millesimo di secondo o due, produce XML ben formato, che l'altro metodo non lo fa.
Ma entrambi i metodi stanno creando documenti XML di 100.000 elementi in circa 60 millisecondi sul mio computer portatile di due anni, una quantità di tempo che si riduce ad essere irrilevante rispetto al tempo necessario per spingere tanti dati sulla rete .
fonte
2010-03-19 17:49:37
Impressionante lavoro. In realtà ho fatto questa stessa cosa sulla mia macchina e stavo tornando qui per pubblicare i risultati, ma mi hai battuto al punch. I miei risultati sono essenzialmente uguali a quelli che hai trovato. +1 – Josh
Sono d'accordo che XmlWriter è migliore, ma se stiamo parlando di ottimizzazione, string.Format non è un modo per andare. sb.Append ("") .Append (contenuto) .Append (" "); rende la versione di StringBuilder 2,5 volte più veloce dell'altra. –