首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuilder vs XmlTextWriter

StringBuilder vs XmlTextWriter
EN

Stack Overflow用户
提问于 2010-03-19 23:20:46
回答 4查看 6.4K关注 0票数 9

我正试图从一个提供HttpHandler内容的定制Xml中尽可能多地提高性能。

我想知道哪一个性能更好。使用XmlTextWriter类或即席StringBuilder操作,如:

代码语言:javascript
复制
StringBuilder sb = new StringBuilder("<?xml version="1.0" encoding="UTF-8" ?>");    
sb.AppendFormat("<element>{0}</element>", SOMEVALUE);

有谁有第一手的经验吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-20 01:49:38

正如Josh所说,这是一个微优化,如果你还没有证明它的必要性,你甚至不应该考虑它。测试也真的不难:

代码语言:javascript
复制
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();
}

XmlWriter版本不仅一致地快了一两毫秒,而且生成了格式良好的XML,这是其他方法所不能做到的。

但是这两种方法在我使用了两年的笔记本电脑上创建100,000个元素的XML文档只需要大约60毫秒,与通过网络推送这么多数据相比,这段时间变得微不足道。

票数 13
EN

Stack Overflow用户

发布于 2012-07-12 01:20:35

我同意XmlWriter在代码可维护性方面更好,但如果我们讨论的是性能优化,您应该同时避免XmlWriter和StringBuilder.AppendFormat,因为使用格式化程序会破坏性能。

改变

代码语言:javascript
复制
sb.AppendFormat("<element>{0}</element>", content);

代码语言:javascript
复制
sb.Append("<element>").Append(content).Append("</element>");

使StringBuilder版本比罗伯特答案中的其他版本快2.5倍。

票数 7
EN

Stack Overflow用户

发布于 2010-03-19 23:26:56

SOMEVALUE中包含&<时,这种方法会给您带来麻烦。使用支持xml的类来生成xml。请阅读HOWTO Avoid Being Called a Bozo When Producing XML

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2478427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档