欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#減少垃圾回收壓力的字符串操作詳解

 更新時間:2018年03月04日 14:10:47   作者:衣舞晨風  
這篇文章給大家詳細分析了C#減少垃圾回收壓力的字符串操作的相關知識點,有興趣的朋友參考學習下吧。

C# 性能優(yōu)化細節(jié)

1、使用string.Empty給一個空字符串變量賦初始值

  • String.Empty是一個指代,而””是具體的實現
string filter=“”;//不建議 string filter=string.Empty; //建議

2、使用str.Length == 0做空串比較

  • 最快的方法:if (str.Length == 0)
  • 其次:if (str == String.Empty)或 if (str == "")

3、避免不必要的字符串ToUpper、ToLower類操作

  • ToUpper、ToLower這類方法均會重新生成字符串對
  • String.Compare可實現忽略字符串大小寫
//不推薦的寫法if(s1.ToUpper()==s2.ToUpper()) …;//推薦的寫法if(String.Compare( s1, s2, true ) == 0) …;

4、巧用StringBuilder進行字符串拼接操作

  • 如果要構造一個較長的字符串,尤其是拼接超過10次時(經驗值),應使用StringBuilder做字符串拼接操作。
//不建議: 
string s = null;
for (int i = 0; i < 10000; i++)
{
s += i;
}
//建議:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
sb.Append(i);
}
string t = sb.ToString();

5、創(chuàng)建StringBuilder應指定初始大小

  • 默認的初始大小為16,一旦超過即需要Resize一次并增加GC壓力。建議根據經驗值為其指定初始大小。
StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < 10; i++) 
{ 
 sb.Append(i); 
} 
string s = sb.ToString(); 
//建議修改為 
StringBuilder sb = new StringBuilder(256); 
for (int i = 0; i < 10; i++) 
{ 
 sb.Append(i); 
} 
string s = sb.ToString(); 

6、避免濫用StringBuilder

  • 類似str1+str2+str3+str4的字符串拼接操作會被編譯為 String.Concat(str1,str2,str3, str4),效率反而高于StringBuilder。String.Concat會一次性確定字符串長度, StringBuilder需要做Resize,適用于多次生成string對象的情況。

7、通過直接設置.Length=0來初始化StringBuilder

  • 根據實驗結果,多次使用同一StringBuilder對象時,通過直接設置.Length=0來初始化速度最快。
StringBuiler sb = new StringBuilder(256); 
 ...... 
sb.Remove(0, sb.Length); //不建議 
sb.Length = 0; //建議 

8、不要使用.Length=0來釋放StringBuilder占用的內存

static void test() 
{ 
 StringBuilder sb = new StringBuilder(256); 
 for (int i = 0; i < 100; i++) 
 { 
  sb.Append(i); 
 } 
 string t = sb.ToString(); 
 ……//其他不使用變量sb的代碼段 
 sb.Length = 0; //去掉該句手工清空sb代碼,會更早釋放內存 
} 


相關文章

  • 基于C#的socket編程的TCP異步的實現代碼

    基于C#的socket編程的TCP異步的實現代碼

    本篇文章主要介紹了基于C#的socket編程的TCP異步的實現代碼,詳解的講訴了TCP通信異步的實現,有興趣的可以了解一下。
    2016-11-11
  • 用C#縮小照片上傳到各種空間的具體方法

    用C#縮小照片上傳到各種空間的具體方法

    這篇文章介紹了用C#縮小照片的具體方法,有需要的朋友可以參考一下
    2013-09-09
  • 詳細分析c# 運算符重載

    詳細分析c# 運算符重載

    這篇文章主要介紹了c# 運算符重載的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • c#連接access數據庫操作類分享

    c#連接access數據庫操作類分享

    本文介紹了c#連接access數據庫的方法,可以執(zhí)行刪除、更新、插入等操作,大家參考使用吧
    2014-01-01
  • .Net6開發(fā)winform程序使用依賴注入

    .Net6開發(fā)winform程序使用依賴注入

    本文詳細講解了.Net6開發(fā)winform程序使用依賴注入的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#使用StackExchange.Redis實現分布式鎖的兩種方式介紹

    C#使用StackExchange.Redis實現分布式鎖的兩種方式介紹

    分布式鎖在集群的架構中發(fā)揮著重要的作用,這篇文章主要為大家介紹了C#使用StackExchange.Redis實現分布式鎖的兩種方式,希望對大家有一定的幫助
    2025-04-04
  • C#連接ClickHouse數據庫的步驟指南

    C#連接ClickHouse數據庫的步驟指南

    在 C# 中連接 ClickHouse 數據庫,您可以使用 ClickHouse.Client 庫,這個庫提供了對 ClickHouse 數據庫的高效訪問,以下是詳細的步驟指南,幫助您在 C# 項目中連接和操作 ClickHouse 數據庫,需要的朋友可以參考下
    2024-12-12
  • 解答“60k”大佬的19道C#面試題(下)

    解答“60k”大佬的19道C#面試題(下)

    這篇文章主要解答了“60k”大佬的19道C#面試題中的后9道,文中的面試題比較小眾,作者給了不錯的答案,相信對你以后的面試有所幫助,感興趣就來了解下
    2020-06-06
  • C#實現寫入文本文件內容的方法

    C#實現寫入文本文件內容的方法

    這篇文章主要介紹了C#實現寫入文本文件內容的方法,涉及C#針對文本文件的判斷、創(chuàng)建及寫入等相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 深入Ref,Out的理解及其使用

    深入Ref,Out的理解及其使用

    本篇文章是對Ref與Out進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論