Skip to content

Instantly share code, notes, and snippets.

@rpgmaker
Created July 24, 2012 20:02
Show Gist options
  • Save rpgmaker/3172264 to your computer and use it in GitHub Desktop.
Save rpgmaker/3172264 to your computer and use it in GitHub Desktop.
StringBuilder vs XmlWriter Test
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Xml;
namespace SbVsXmlWriter {
class Program {
static XmlWriterSettings setting = new XmlWriterSettings() { OmitXmlDeclaration = true };
static readonly StringBuilder writerSb = new StringBuilder(1000);
static readonly XmlWriter writer = XmlWriter.Create(writerSb, setting);
static void Main(string[] args) {
Test("XmlWriter", UsingXmlWriter);
Test("XmlWriterWithCacheInternalSB", UsingXmlWriterWithCache);
Test("StringBuilder", UsingSb);
Test("StringBuilderWithCache", UsingSbWithCache);
}
static void UsingXmlWriterWithCache() {
writerSb.Clear();
using (var xmlWriter = XmlWriter.Create(writerSb, setting)) {
xmlWriter.WriteStartElement("root");
xmlWriter.WriteStartElement("key");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("key2");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("key3");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("key4");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.Flush();
}
var result = writerSb.ToString();
}
static void UsingXmlWriter() {
var sb = new StringBuilder(1000);
using (var xmlWriter = XmlWriter.Create(sb, setting)) {
xmlWriter.WriteStartElement("root");
xmlWriter.WriteStartElement("key");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("key2");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("key3");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("key4");
xmlWriter.WriteString("MyValue");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.Flush();
}
var result = sb.ToString();
}
static StringBuilder sbx = new StringBuilder(1000);
static void UsingSbWithCache() {
sbx.Clear();
sbx.Append("<root>");
sbx.Append("<key>");
sbx.Append("MyValue");
sbx.Append("</key>");
sbx.Append("<key2>");
sbx.Append("MyValue");
sbx.Append("</key2>");
sbx.Append("<key3>");
sbx.Append("MyValue");
sbx.Append("</key3>");
sbx.Append("<key4>");
sbx.Append("MyValue");
sbx.Append("</key4>");
sbx.Append("</root>");
var result = sbx.ToString();
}
static void UsingSb() {
var sb = new StringBuilder(1000);
sb.Append("<root>");
sb.Append("<key>");
sb.Append("MyValue");
sb.Append("</key>");
sb.Append("<key2>");
sb.Append("MyValue");
sb.Append("</key2>");
sb.Append("<key3>");
sb.Append("MyValue");
sb.Append("</key3>");
sb.Append("<key4>");
sb.Append("MyValue");
sb.Append("</key4>");
sb.Append("</root>");
var result = sb.ToString();
}
static void Test(string name, Action action) {
var count = 100000000;
var stopWatch = new Stopwatch();
stopWatch.Start();
for (var i = 0; i < count; i++)
action();
stopWatch.Stop();
Console.WriteLine("Iteration: {0}", count);
Console.WriteLine("Completed {0} in Avg {1} Milliseconds", name, stopWatch.ElapsedMilliseconds);
Console.WriteLine();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment