我使用标准字符串方法,StringBuilder类方法以及使用XDocument和XElement类的方法执行了一些测试。通过简短的列表,StringBuilder类获得了胜利,但是具有更大的列表的XML类给了可比的时间。我使用的测试代码如下:
List<string> list;
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
protected void Page_Load(object sender, EventArgs e)
{
list = Enumerable.Range(0, 15000).Select(i => i.ToString()).ToList();
UsingStrings();
UsingStringBuilder();
UsingXDocument();
}
private void UsingStrings()
{
timer.Reset();
timer.Start();
string beginItemNode = "<Node>";
string endItemNode = "</Node>";
string xml = "<Root>";
foreach (string item in list)
{
xml += beginItemNode + item + endItemNode;
}
xml += "</Root>";
timer.Stop();
Response.Write(string.Format("Strings time:{0}<br />", timer.Elapsed.Ticks));
}
private void UsingStringBuilder()
{
timer.Reset();
timer.Start();
StringBuilder sb = new StringBuilder();
sb.Append("<Root>");
foreach (string item in list)
{
sb.AppendFormat("<Node>{0}</Node>", item);
}
sb.Append("</Root>");
timer.Stop();
Response.Write(string.Format("StringBuilder time:{0}<br />", timer.Elapsed.Ticks));
}
private void UsingXDocument()
{
timer.Reset();
timer.Start();
XDocument xDoc = new XDocument();
xDoc.Add(new XElement("Root"));
foreach (var item in list)
{
XElement element = new XElement("Node", item);
xDoc.Root.Add(element);
}
timer.Stop();
Response.Write(string.Format("XDocument time:{0}<br />", timer.Elapsed.Ticks));
}
以上测试了我的机器上,结果如下:
First run:
Strings time:239750613
StringBuilder time:55509
XDocument time:61904
Second run:
Strings time:289422753
StringBuilder time:198595
XDocument time:80032
如果你想不进行格式化使用显示的XDocument XML作为一个字符串:
string xml = xDoc.ToString(SaveOptions.DisableFormatting);
编辑:我最初说XDocument更快,但运行测试几次似乎它通常等同于StringBuilder方法,虽然它似乎更加con有时候StringBuilder会更快,其他时候会慢一些。很明显,使用字符串比较慢得多。
速度是一个字符串生成器?这看起来像要走的路虽然.. – Steoates 2010-11-17 09:21:49
如果顺序不重要,列表通常很大,有人可以'.AsParallel()' - 它呢? – 2010-11-17 09:56:29
订单并不重要,但大多数情况下,这些清单最多不超过50件,但有一些情况可能超过100件,但有点帮助! – Steoates 2010-11-17 09:58:29