最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2024年12月23日 08:37:53   作者:追逐時光者  
在C#編程中字符串拼接是一種常見且基礎(chǔ)的操作,廣泛應(yīng)用于各種場景,如動態(tài)生成SQL查詢,構(gòu)建日志信息等,本文為大家整理了C#中字符串拼接的常見6種方式及其使用BenchmarkDotNet進行性能分析對比,需要的可以參考下

前言

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

BenchmarkDotNet

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

使用教程詳細介紹:使用BenchmarkDotNet對.NET代碼進行性能基準測試

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

private const int IterationCount = 1000;
private const string StringPart1 = "追逐時光者";
private const string StringPart2 = "DotNetGuide";
private const string StringPart3 = "DotNetGuide技術(shù)社區(qū)";
private readonly string[] _stringPartsArray = { "追逐時光者", "DotNetGuide", "DotNetGuide技術(shù)社區(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;
        }

$內(nèi)插字符串

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

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

MethodMeanErrorStdDevGen0Gen1Allocated
PlusOperator2,066.28 us35.761 us63.566 us5238.2813789.062532283.12 KB
InterpolatedString1,984.56 us29.949 us28.014 us5238.2813789.062532283.12 KB
StringFormat2,112.02 us25.020 us23.404 us5257.8125777.343832369.06 KB
StringConcat2,027.09 us28.300 us26.472 us5257.8125777.343832369.06 KB
StringJoin2,017.36 us27.111 us22.639 us5257.8125777.343832369.06 KB
StringBuilder13.63 us0.065 us0.058 us23.25444.6387143.96 KB

說明:

  • Mean: 所有測量值的算術(shù)平均值。
  • Error: 99.9% 置信區(qū)間的一半。
  • StdDev: 所有測量值的標準差。
  • 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 秒)。

性能基準對比測試結(jié)論

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

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

以上就是C#中字符串拼接方式及其性能分析對比的詳細內(nèi)容,更多關(guān)于C#字符串拼接的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#?Winform消息通知系統(tǒng)托盤氣泡提示框ToolTip控件

    C#?Winform消息通知系統(tǒng)托盤氣泡提示框ToolTip控件

    這篇文章主要為大家介紹了C#或Winform中的消息通知之系統(tǒng)托盤的氣泡提示框窗口(系統(tǒng)toast通知)、ToolTip控件和ToolTipText屬性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 使用C#與SQL Server數(shù)據(jù)庫進行交互的詳細流程

    使用C#與SQL Server數(shù)據(jù)庫進行交互的詳細流程

    本文詳細介紹了如何使用Visual Studio創(chuàng)建Windows窗體應(yīng)用程序連接本地SQL Server數(shù)據(jù)庫,并實現(xiàn)數(shù)據(jù)插入、查詢和刪除等功能,通過步驟說明和代碼示例,展示了如何使用DataGridView控件和按鈕控件與數(shù)據(jù)庫進行交互,文章還總結(jié)了易錯點,需要的朋友可以參考下
    2025-11-11
  • c# 如何實現(xiàn)不同進程之間的通信

    c# 如何實現(xiàn)不同進程之間的通信

    這篇文章主要介紹了c# 如何實現(xiàn)不同進程之間的通信,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-11-11
  • WinForms中主要控件的詳細使用教程

    WinForms中主要控件的詳細使用教程

    WinForms (Windows Forms) 是 Microsoft 提供的用于構(gòu)建 Windows 桌面應(yīng)用程序的框架,它提供了豐富的控件集合,可以滿足各種 UI 設(shè)計需求,以下是 WinForms 中主要控件的詳細使用教程,,需要的朋友可以參考下
    2025-05-05
  • c#實現(xiàn)抓取高清美女妹紙圖片

    c#實現(xiàn)抓取高清美女妹紙圖片

    本文給大家分享的是一則使用c#實現(xiàn)抓取網(wǎng)絡(luò)高清美女妹紙圖片的代碼,這么好的東西,當然不能獨享,推薦給小伙伴們。
    2015-03-03
  • C#中Region、Exclude的用法小結(jié)

    C#中Region、Exclude的用法小結(jié)

    本文主要介紹了C#中Region、Exclude的用法小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11
  • Unity實現(xiàn)大轉(zhuǎn)盤的簡單筆記

    Unity實現(xiàn)大轉(zhuǎn)盤的簡單筆記

    這篇文章主要為大家分享了Unity實現(xiàn)大轉(zhuǎn)盤的簡單筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 關(guān)于ASP網(wǎng)頁無法打開的解決方案

    關(guān)于ASP網(wǎng)頁無法打開的解決方案

    asp網(wǎng)頁實際上就是動態(tài)網(wǎng)頁,是在服務(wù)端執(zhí)行和解析的。有時也很奇怪,經(jīng)常遇到asp網(wǎng)頁無法打開的情況,下面小編給大家整理些關(guān)于asp網(wǎng)頁無法打開的解決方案,需要的朋友可以參考下
    2015-08-08
  • 淺談c#開發(fā)者應(yīng)該了解的15個特性

    淺談c#開發(fā)者應(yīng)該了解的15個特性

    本文列舉了15個值得了解的C#特性,旨在讓.NET開發(fā)人員更好的使用C#語言進行開發(fā)工作。
    2021-05-05
  • c#檢測端口是否被占用的簡單實例

    c#檢測端口是否被占用的簡單實例

    這篇文章主要介紹了c#檢測端口是否被占用的簡單實例,有需要的朋友可以參考一下
    2013-12-12

最新評論

临泉县| 怀来县| 旅游| 诸城市| 德令哈市| 莒南县| 三穗县| 广灵县| 黄石市| 弥渡县| 观塘区| 搜索| 盖州市| 汶上县| 鹤壁市| 昌乐县| 修武县| 茌平县| 卢湾区| 开原市| 彰武县| 扎鲁特旗| 日照市| 庆安县| 沧源| 哈巴河县| 会泽县| 思南县| 南康市| 启东市| 麦盖提县| 海原县| 兴宁市| 普兰店市| 金秀| 潮安县| 杨浦区| 大英县| 突泉县| 桃源县| 马公市|