Created
July 24, 2012 20:02
-
-
Save rpgmaker/3172264 to your computer and use it in GitHub Desktop.
StringBuilder vs XmlWriter Test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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