成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 字符串拼接的幾種方式及其性能分析對比

開發(fā)
不同的字符串拼接方式在性能和內存使用上可能存在顯著差異。今天咱們一起來看看在C#中字符串拼接的常見6種方式及其使用BenchmarkDotNet進行性能分析對比。

在C#編程中字符串拼接是一種常見且基礎的操作,廣泛應用于各種場景,如動態(tài)生成SQL查詢、構建日志信息、格式化用戶顯示內容等。然而,不同的字符串拼接方式在性能和內存使用上可能存在顯著差異。今天咱們一起來看看在C#中字符串拼接的常見6種方式及其使用BenchmarkDotNet進行性能分析對比。

BenchmarkDotNet

BenchmarkDotNet是一個基于.NET開源、功能全面、易于使用的性能基準測試框架,它為.NET開發(fā)者提供了強大的性能評估和優(yōu)化能力。通過自動化測試、多平臺支持、高級統(tǒng)計分析和自定義配置等特性,BenchmarkDotNet幫助開發(fā)者更好地理解和優(yōu)化軟件系統(tǒng)的性能表現(xiàn)。

拼接基礎數(shù)據(jù)

private const int IterationCount = 1000;
private const string StringPart1 = "追逐時光者";
private const string StringPart2 = "DotNetGuide";
private const string StringPart3 = "DotNetGuide技術社區(qū)";
private readonly string[] _stringPartsArray = { "追逐時光者", "DotNetGuide", "DotNetGuide技術社區(qū)" };

+操作符

        /// <summary>
        /// 使用 + 操作符拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string PlusOperator()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += StringPart1 + " " + StringPart2 + " " + StringPart3;
            }
            return result;
        }

$內插字符串

        /// <summary>
        /// 使用 $ 內插字符串拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string InterpolatedString()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += $"{StringPart1} {StringPart2} {StringPart3}";
            }
            return result;
        }

String.Format

        /// <summary>
        /// 使用string.Format()拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringFormat()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += string.Format("{0} {1} {2}", StringPart1, StringPart2, StringPart3);
            }
            return result;
        }

String.Concat

        /// <summary>
        /// 使用string.Concat()拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringConcat()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += string.Concat(StringPart1, " ", StringPart2, " ", StringPart3);
            }
            return result;
        }

String.Join

        /// <summary>
        /// 使用string.Join()拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringJoin()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += string.Join(" ", _stringPartsArray);
            }
            return result;
        }

StringBuilder

        /// <summary>
        /// 使用StringBuilder拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringBuilder()
        {
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < IterationCount; i++)
            {
                stringBuilder.Append(StringPart1);
                stringBuilder.Append(" ");
                stringBuilder.Append(StringPart2);
                stringBuilder.Append(" ");
                stringBuilder.Append(StringPart3);
            }
            return stringBuilder.ToString();
        }

性能基準對比測試完整代碼

    [MemoryDiagnoser]//記錄內存分配情況
    public class StringConcatenationBenchmark
    {
        private const int IterationCount = 1000;
        private const string StringPart1 = "追逐時光者";
        private const string StringPart2 = "DotNetGuide";
        private const string StringPart3 = "DotNetGuide技術社區(qū)";
        private readonly string[] _stringPartsArray = { "追逐時光者", "DotNetGuide", "DotNetGuide技術社區(qū)" };

        /// <summary>
        /// 使用 + 操作符拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string PlusOperator()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += StringPart1 + " " + StringPart2 + " " + StringPart3;
            }
            return result;
        }

        /// <summary>
        /// 使用 $ 內插字符串拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string InterpolatedString()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += $"{StringPart1} {StringPart2} {StringPart3}";
            }
            return result;
        }

        /// <summary>
        /// 使用string.Format()拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringFormat()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += string.Format("{0} {1} {2}", StringPart1, StringPart2, StringPart3);
            }
            return result;
        }

        /// <summary>
        /// 使用string.Concat()拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringConcat()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += string.Concat(StringPart1, " ", StringPart2, " ", StringPart3);
            }
            return result;
        }

        /// <summary>
        /// 使用string.Join()拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringJoin()
        {
            string result = string.Empty;
            for (int i = 0; i < IterationCount; i++)
            {
                result += string.Join(" ", _stringPartsArray);
            }
            return result;
        }

        /// <summary>
        /// 使用StringBuilder拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringBuilder()
        {
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < IterationCount; i++)
            {
                stringBuilder.Append(StringPart1);
                stringBuilder.Append(" ");
                stringBuilder.Append(StringPart2);
                stringBuilder.Append(" ");
                stringBuilder.Append(StringPart3);
            }
            return stringBuilder.ToString();
        }
    }

性能基準對比測試分析報告

Method

Mean

Error

StdDev

Gen0

Gen1

Allocated

PlusOperator

2,066.28 us

35.761 us

63.566 us

5238.2813

789.0625

32283.12 KB

InterpolatedString

1,984.56 us

29.949 us

28.014 us

5238.2813

789.0625

32283.12 KB

StringFormat

2,112.02 us

25.020 us

23.404 us

5257.8125

777.3438

32369.06 KB

StringConcat

2,027.09 us

28.300 us

26.472 us

5257.8125

777.3438

32369.06 KB

StringJoin

2,017.36 us

27.111 us

22.639 us

5257.8125

777.3438

32369.06 KB

StringBuilder

13.63 us

0.065 us

0.058 us

23.2544

4.6387

143.96 KB

說明:

  • Mean: 所有測量值的算術平均值。
  • Error: 99.9% 置信區(qū)間的一半。
  • StdDev: 所有測量值的標準差。
  • Gen0: 第 0 代 GC 每 1000 次操作收集一次。
  • Gen1: 第 1 代 GC 每 1000 次操作收集一次。
  • Gen2: 第 2 代 GC 每 1000 次操作收集一次。
  • Allocated: 每次操作分配的內存(僅托管內存,包含所有內容,1KB = 1024B)。
  • 1 ms: 1 毫秒(0.001 秒)。

性能基準對比測試結論

從上面的性能基準對比測試分析報告來看StringBuilder是性能最好的字符串拼接方式,特別是在需要頻繁進行拼接的場景中。其他方式(如+操作符、$內插字符串、String.Format、String.Concat和String.Join)在性能上相對較差,因為它們會導致多次內存分配和復制。

因此我們在選擇字符串拼接方式時,應該根據(jù)具體場景和需求進行選擇。如果性能是關鍵因素,并且需要頻繁進行拼接,則應使用StringBuilder。如果代碼簡潔性和易讀性更重要,并且拼接次數(shù)較少,則可以考慮使用其他方式。

責任編輯:趙寧寧 來源: 追逐時光者
相關推薦

2025-02-13 08:13:29

C#字符串拼接

2024-12-20 12:10:19

2009-09-02 16:21:20

C#字符串

2009-08-06 17:24:08

C#字符串

2025-03-14 08:35:00

字符串C#字符串拼接

2009-08-21 15:06:09

C#連接字符串

2024-11-29 07:32:38

2023-12-11 08:39:14

Go語言字符串拼

2013-06-24 15:16:29

Java字符串拼接

2025-01-03 08:31:43

2025-03-27 03:20:00

C#開發(fā)字符串

2009-08-06 16:01:09

C#字符串函數(shù)大全

2009-08-07 14:15:21

C#字符串分割

2009-08-07 14:22:56

C#字符串搜索

2009-08-07 14:34:33

C#模式字符串

2009-08-24 17:06:37

C#字符串

2009-08-07 13:50:11

C#字符串

2009-08-24 13:04:44

操作步驟C#字符串

2009-08-26 13:24:54

C#字符串

2023-10-31 18:57:02

Java字符串
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区在线免费观看 | 一区二区中文字幕 | 在线免费观看黄视频 | 黄色免费看 | 成人av免费 | 国产日韩精品在线 | 精品欧美色视频网站在线观看 | 亚洲国产成人精品女人久久久 | 成人网av | 国产成人精品999在线观看 | 亚洲444kkkk在线观看最新 | 天天操天天舔 | 久久久国产一区二区三区四区小说 | 99国产精品99久久久久久粉嫩 | 精品欧美二区 | 99视频在线免费观看 | 成人av一区 | 国产精品一区在线观看 | 综合精品| 午夜视频网站 | av在线一区二区三区 | 久久综合九色综合欧美狠狠 | 精品影院 | 午夜影院 | av网站观看 | 精品成人av | 色婷婷精品 | 99热这里有精品 | 99久久免费精品视频 | 亚洲综合在线网 | 久久久成人精品 | 羞羞色视频 | 久久夜夜 | 密色视频 | 欧美日韩在线一区二区三区 | 亚洲精品久久久久久宅男 | 国产精品久久久久久久久图文区 | 免费a v网站 | 久久免费看 | 国产高清在线精品一区二区三区 | 福利片在线 |