偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C#字符串拼接的六種方式及其性能分析對(duì)比

開發(fā) 前端
在C#編程中字符串拼接是一種常見且基礎(chǔ)的操作,廣泛應(yīng)用于各種場(chǎng)景,如動(dòng)態(tài)生成SQL查詢、構(gòu)建日志信息、格式化用戶顯示內(nèi)容等。

前言

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

BenchmarkDotNet

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

  • 使用教程詳細(xì)介紹:https://mp.weixin.qq.com/s/6mpHS1OVuIlBgdU71OIIOw

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

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

+操作符

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

$內(nèi)插字符串

/// <summary>
        /// 使用 $ 內(nèi)插字符串拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string InterpolatedString()
        {
            string result = $"{StringPart1} {StringPart2} {StringPart3}";
            return result;
        }

String.Format

/// <summary>
        /// 使用string.Format()拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringFormat()
        {
            string 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.Concat(StringPart1, " ", StringPart2, " ", StringPart3);
            return result;
        }

String.Join

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

StringBuilder

Append拼接字符串

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

AppendFormat拼接字符串

/// <summary>
        /// 使用StringBuilder.AppendFormat拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringBuilderAppendFormat()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.AppendFormat("{0} {1} {2}", StringPart1, StringPart2, StringPart3);
            return stringBuilder.ToString();
        }

性能基準(zhǔn)對(duì)比測(cè)試完整代碼

咱們分別以少量字符串拼接和大量字符串拼接為例,進(jìn)行性能基準(zhǔn)對(duì)比測(cè)試:

說明:

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

少量字符串拼接

using BenchmarkDotNet.Attributes;
using System.Text;

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

        #region 少量字符串拼接

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

        /// <summary>
        /// 使用 $ 內(nèi)插字符串拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string InterpolatedString()
        {
            string result = $"{StringPart1} {StringPart2} {StringPart3}";
            return result;
        }

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

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

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

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

        /// <summary>
        /// 使用StringBuilder.AppendFormat拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string StringBuilderAppendFormat()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.AppendFormat("{0} {1} {2}", StringPart1, StringPart2, StringPart3);
            return stringBuilder.ToString();
        }

        #endregion
    }
}

圖片

大量字符串拼接

using BenchmarkDotNet.Attributes;
using System.Text;

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

        #region 大量字符串拼接

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

        /// <summary>
        /// 使用StringBuilder.Append拼接字符串
        /// </summary>
        /// <returns></returns>
        [Benchmark]
        public string BigDataStringBuilderAppend()
        {
            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();
        }

        #endregion
    }
}

圖片圖片

責(zé)任編輯:武曉燕 來源: 追逐時(shí)光者
相關(guān)推薦

2024-12-23 07:38:20

2025-03-14 08:35:00

字符串C#字符串拼接

2024-12-20 12:10:19

2024-11-29 07:32:38

2025-01-03 08:31:43

2009-09-02 16:21:20

C#字符串

2017-06-26 10:35:58

前端JavaScript繼承方式

2009-08-21 15:06:09

C#連接字符串

2022-09-22 11:40:11

JavaScript數(shù)組開發(fā)

2025-02-27 00:00:30

SpringJava方式

2019-05-16 13:00:18

異步編程JavaScript回調(diào)函數(shù)

2009-02-11 09:46:00

ASON網(wǎng)絡(luò)演進(jìn)

2017-10-20 11:07:45

編程代碼編程模式

2023-12-11 08:39:14

Go語言字符串拼

2013-06-24 15:16:29

Java字符串拼接

2022-03-23 12:55:50

農(nóng)業(yè)物聯(lián)網(wǎng)

2020-07-31 11:12:39

安全威脅網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2022-01-14 10:34:50

黑客隱藏蹤跡網(wǎng)絡(luò)安全

2020-04-27 09:00:00

雙因素認(rèn)證身份認(rèn)證生物識(shí)別

2016-07-08 15:02:47

云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)