c# – stringbuilder与string concat

c# – stringbuilder与string concat,第1张

概述在我的项目中,我循环了一个dataview结果. string html =string.empty; DataView dV = data.DefaultView; for(int i=0;i< dV.Count;i++) { DataRowView rv = dV[i]; html += rv.Row["X"].Tostring(); } dV中的行数将为3或4. 在我的项目中,我循环了一个datavIEw结果.
string HTML =string.empty; DataVIEw dV = data.defaultview; for(int i=0;i< dV.Count;i++) {     DaTarowVIEw rv = dV[i];     HTML += rv.Row["X"].Tostring(); }

dV中的行数将为3或4.

在这种情况下使用字符串concat = opearator或StringBuilder更好,为什么?

解决方法 我会在这里使用StringBuilder,只是因为它描述了你在做什么.

对于3或4个字符串的简单连接,它可能不会有任何显着差异,字符串连接甚至可能稍快一些 – 但是如果您错了并且有很多行,则StringBuilder将开始更高效,它总是更加描述你正在做什么.

或者,使用以下内容:

string HTML = string.Join("",dv.Cast<DaTarowVIEw>()                                .Select(rv => rv.Row["X"]));

请注意,您目前的字符串之间没有任何分隔符.你确定这是你想要的吗? (另请注意,你的代码在当前没有什么意义 – 你没有在循环中使用我,为什么?)

我有一个article about string concatenation,更详细地介绍了为什么值得使用StringBuilder和什么时候.

编辑:对于那些怀疑字符串连接可以更快的人来说,这是一个测试 – 故意“讨厌”的数据,但只是为了证明这是可能的:

using System;using System.Diagnostics;using System.Text;class Test{    static Readonly string[] Bits = {         "small string","string which is a bit longer","stirng which is longer again to force yet another copy with any luck"    };    static Readonly int ExpectedLength = string.Join("",Bits).Length;    static voID Main()            {        Time(StringBuilderTest);        Time(ConcatenateTest);    }    static voID Time(Action action)    {        GC.Collect();        GC.WaitForPendingFinalizers();        GC.Collect();        // Make sure it's JITted        action();        Stopwatch sw = Stopwatch.StartNew();        for (int i = 0; i < 10000000; i++)        {            action();        }        sw.Stop();        Console.Writeline("{0}: {1} millis",action.Method.name,(long) sw.Elapsed.TotalMilliseconds);    }    static voID Concatenatetest()    {        string x = "";        foreach (string bit in Bits)        {            x += bit;        }        // Force a valIDation to prevent dodgy optimizations        if (x.Length != ExpectedLength)        {            throw new Exception("Eek!");        }    }    static voID StringBuildertest()    {        StringBuilder builder = new StringBuilder();        foreach (string bit in Bits)        {            builder.Append(bit);        }        string x = builder.ToString();        // Force a valIDation to prevent dodgy optimizations        if (x.Length != ExpectedLength)        {            throw new Exception("Eek!");        }    }}

我的机器上的结果(用/ o / deBUG-编译):

StringBuilderTest: 2245 millisConcatenateTest: 989 millis

我已经运行了好几次,包括反转测试的顺序,结果是一致的.

总结

以上是内存溢出为你收集整理的c# – stringbuilder与string concat全部内容,希望文章能够帮你解决c# – stringbuilder与string concat所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存