ホームページ > バックエンド開発 > C#.Net チュートリアル > C# 文字列操作 -- ガベージ コレクションの負荷を軽減します。

C# 文字列操作 -- ガベージ コレクションの負荷を軽減します。

黄舟
リリース: 2017-02-13 11:59:03
オリジナル
1641 人が閲覧しました

C# パフォーマンス最適化の詳細

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 を使用する必要があります。

    [object Object]
    ログイン後にコピー

5. StringBuilder を作成するときは、初期サイズを指定する必要があります


  • デフォルトの初期サイズは 16 です。これを超えると、サイズ変更と 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 を実行する必要があります。


7. .Length=0を直接設定してStringBuilderを初期化します


  • 実験結果によれば、同じStringBuilderオブジェクトを複数回使用する場合は、.Length=を直接設定します0 を指定すると最速で初期化されます。

    StringBuiler sb = new StringBuilder(256);
      ......
    sb.Remove(0, sb.Length); //不建议
    sb.Length = 0; //建议
    ログイン後にコピー


8. StringBuilder によって占有されているメモリを解放するために .Length=0 を使用しないでください

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代码,会更早释放内存
}
ログイン後にコピー


9。


以上 C# の文字列操作です。ガベージ コレクションの負荷を軽減するコンテンツです。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート