Ok, I ran some timing tests. This is what I got (100,000 times):
XmlTextWriter: 2.28 seconds
HttpUtility.HtmlEncode: 2.46 seconds
XmlDocument: 3.05 seconds
So the winner is XmlTextWriter
code:
// test
DateTime start = DateTime.Now;
for (int ind = 0; ind < 100000; ind++)
{
StringWriter sw = new StringWriter();
XmlTextWriter xtw = new XmlTextWriter(sw);
xtw.WriteStartElement(ModToNode(mod));
xtw.WriteAttributeString("op", OpToAttr(op));
xtw.WriteString(message);
xtw.WriteEndElement();
xtw.Close();
String str = sw.ToString();
str = null;
}
TimeSpan ts1 = DateTime.Now.Subtract(start);
start = DateTime.Now;
for (int ind = 0; ind < 100000; ind++)
{
String str = " <" + ModToNode(mod) +
" op='" + OpToAttr(op) +
"'>" + TextToAttr(message) +
"</" + ModToNode(mod) + ">";
str = null;
}
TimeSpan ts2 = DateTime.Now.Subtract(start);
XmlDocument doc = new XmlDocument();
start = DateTime.Now;
for (int ind = 0; ind < 100000; ind++)
{
XmlElement elem = doc.CreateElement(ModToNode(mod));
XmlAttribute attr = elem.SetAttributeNode("op", "");
attr.Value = OpToAttr(op);
elem.InnerText = message;
String str = elem.OuterXml;
str = null;
}
TimeSpan ts3 = DateTime.Now.Subtract(start);
....
private static string ModToNode(MODULE mod)
{
return mod.ToString().ToLower().Replace('_', '-');
}
private static string OpToAttr(OPERATION op)
{
return op.ToString().ToLower();
}
private static string TextToAttr(string text)
{
return HttpUtility.HtmlEncode(text);
}
--
thanks - dave
david_at_windward_dot_net
http://www.windwardreports.com