C# String.Join 与 StringBuilder 对比,谁更快 Performance Comparison

String.Join 文档      StringBuilder 文档

 

这两天刷 Leedcode 做到一道 String 的题时突然想到这俩对比的问题,于是查了一下资料并简单对比了一下。

首先对于 151. Reverse Words in a String  这道题而言,对比提交结果如下:

 

 

 明显 StringBuilder 更快,并且更省内存。

 

    // Join   
    public static string ReverseWords(string s)
        {
            var sArr = s.Split(' ');
            var joinStr ="";
            for (var i = sArr.Count() - 1; i >= 0; i--)
            {
                if (sArr[i].ToString() != "")
                {
                    joinStr = string.Join(" ", joinStr, sArr[i]);
                }
            }
            return joinStr.Trim();
        }

        // StringBuilder     
        public string ReverseWords2(string s)
        {
            var sArr = s.Split(' ');
            var sb = new StringBuilder();
            for (var i = sArr.Count() - 1; i >= 0; i--)
            {
                if (sArr[i].ToString() != "")
                {
                    sb.Append(sArr[i]);
                    if (i != 0) sb.Append(" ");
                }
            }
            return sb.ToString().Trim();
        }

 

 

 

那么什么情况下Join会更快呢?   

答: 在你已经有一个字符串数组,并且要以分隔符合并的情况下, Join 是最快的方法。 也就是 : Join(String, String[]) 的方法。

 

当然了,无论这两种方法用哪一种,肯定都是优于  "string1" + " " + "string2"  这样直接又粗暴的方式的。 

 

具体证明和更多讨论请参考:  https://stackoverflow.com/questions/585860/string-join-vs-stringbuilder-which-is-faster

 

posted @ 2019-04-20 13:43  Hydor  阅读(1368)  评论(0编辑  收藏  举报