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

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

開發 前端
在C#編程中字符串拼接是一種常見且基礎的操作,廣泛應用于各種場景,如動態生成SQL查詢、構建日志信息、格式化用戶顯示內容等。

前言

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

BenchmarkDotNet

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

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

拼接基礎數據

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

+操作符

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

$內插字符串

/// <summary>
        /// 使用 $ 內插字符串拼接字符串
        /// </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();
        }

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

咱們分別以少量字符串拼接和大量字符串拼接為例,進行性能基準對比測試:

說明:

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

少量字符串拼接

using BenchmarkDotNet.Attributes;
using System.Text;

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

        #region 少量字符串拼接

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

        /// <summary>
        /// 使用 $ 內插字符串拼接字符串
        /// </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]//記錄內存分配情況
    public class StringConcatenationBenchmark
    {
        private const int IterationCount = 1000;
        private const string StringPart1 = "追逐時光者";
        private const string StringPart2 = "DotNetGuide";
        private const string StringPart3 = "DotNetGuide技術社區";
        private readonly string[] _stringPartsArray = { "追逐時光者", "DotNetGuide", "DotNetGuide技術社區" };

        #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
    }
}

圖片圖片

責任編輯:武曉燕 來源: 追逐時光者
相關推薦

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#字符串

2009-08-21 15:06:09

C#連接字符串

2022-09-22 11:40:11

JavaScript數組開發

2023-12-11 08:39:14

Go語言字符串拼

2013-06-24 15:16:29

Java字符串拼接

2025-02-27 00:00:30

SpringJava方式

2017-10-20 11:07:45

編程代碼編程模式

2009-02-11 09:46:00

ASON網絡演進

2017-06-26 10:35:58

前端JavaScript繼承方式

2022-03-23 12:55:50

農業物聯網

2019-05-16 13:00:18

異步編程JavaScript回調函數

2025-03-27 03:20:00

C#開發字符串

2023-10-31 18:57:02

Java字符串

2009-08-06 16:01:09

C#字符串函數大全

2009-08-07 14:15:21

C#字符串分割
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产资源在线播放 | 四季久久免费一区二区三区四区 | 欧美日韩不卡合集视频 | 国产精品中文字幕在线 | 在线免费观看毛片 | 国产精品久久久久久久久久 | 成人国产精品一级毛片视频毛片 | 日本精品一区二区 | 欧美区在线 | 毛片免费观看 | 91久久久久久久久久久 | 日韩国产精品一区二区三区 | 免费看a | 精品国产一区一区二区三亚瑟 | 一区中文 | 欧美性生活一区二区三区 | 99久久免费精品国产男女高不卡 | 久草99 | 91精品国产综合久久久久久丝袜 | 日本三级视频 | 午夜精品一区二区三区免费视频 | 国产羞羞视频在线观看 | 成人午夜在线 | 一二三在线视频 | 精品国产乱码一区二区三区 | 又爽又黄axxx片免费观看 | 久久精品中文字幕 | 亚洲电影一区二区三区 | 91精品国产美女在线观看 | 日韩www | 亚洲欧美日韩精品久久亚洲区 | 久久久免费少妇高潮毛片 | 国产在线播放一区二区三区 | 一区二区三区不卡视频 | 日韩资源| 久草精品视频 | 99精品国产一区二区三区 | 国产免费一级片 | 精品一区二区三区中文字幕 | 亚洲国产视频一区二区 | www网站在线观看 |