C#の単純なパフォーマンスの向上

1、String Split()

  • C#には、10個のSplit()オーバーロードされたメソッドがあります

スプリット()

  • 一般的な使用法
static void SplitChar()
{
    
    
    var str = "Hello|World";
    // 实例化秒表对象
    var s1 = new Stopwatch();
    s1.Start();
    _ = str.Split('|');
    Console.WriteLine($"SplitChar ElapsedTicks:{s1.ElapsedTicks}");
}
  • 最適化された書き込み文字の配列を作成し、それらをパラメーターとしてSplit()メソッドに渡します
static void SplitCharArray()
{
    
    
    var str = "Hello|World";
    // 实例化秒表对象
    var s1 = new Stopwatch();
    s1.Start();
    _ = str.Split(new char[] {
    
     '|' });
    Console.WriteLine($"SplitCharArray ElapsedTicks:{s1.ElapsedTicks}");
}

テスト結果、文字配列を使用する効率がはるかに高いことは明らかです
試験結果

2、String Equals()

  • str変数の値が文字列と等しいかどうかを確認します。“Akshay”理由がわからないstr場合は、値が次のようなります。null
static void Equals1()
{
    
    
    try
    {
    
    
        string str = null;
        Console.WriteLine(str.Equals("Hello World") ? "IF" : "ELSE");
    }
    catch (Exception ex)
    {
    
    
        Console.WriteLine(ex.Message);
    }

}

上記の書き込み、私たちのプログラムはヌル参照異常な
試験結果

  • この方法では使用されていないが、方法が使用さstrEquals()“Akshay”Equals()
static void Equals2()
{
    
    
    try
    {
    
    
        string str = null;
        Console.WriteLine("Hello World".Equals(str) ? "IF" : "ELSE");
    }
    catch (Exception ex)
    {
    
    
        Console.WriteLine(ex.Message);
    }
}

私たちの考え方を変えた後、私たちのプログラムは私たちが定義した結果を出力します
試験結果

3、文字列の追加()

  • ベンチマーク文字列補間、文字列フォーマット、文字列連結、および文字列ビルダー
static void AddStrings()
{
    
    
    string str = "Hello";
    string str1 = "World";
    var s1 = new Stopwatch();

    //String Interploation
    s1.Start();
    _ = $"{str} {str1} is an author";
    Console.WriteLine($"String Interpolation {s1.ElapsedTicks}");

    //String Format
    s1.Restart();
    _ = string.Format("{0},{1} is an author", str, str1);
    Console.WriteLine($"String Format {s1.ElapsedTicks}");

    //String Concat
    s1.Restart();
    _ = string.Concat(str, str1, " is an auther");

    Console.WriteLine($"String Concat {s1.ElapsedTicks}");

    //StringBuilder
    s1.Restart();
    StringBuilder sb = new StringBuilder();
    sb.Append(str);
    sb.Append(str1);
    sb.Append(" is an auther");
    _ = sb.ToString();
    Console.WriteLine($"StringBuilder {s1.ElapsedTicks}");
}

2本の弦をつなぎ合わせる4つの異なる方法string.Concat()、使用時に4つの方法が発生しました
テスト結果は、string.Concat()文字列連結方法の使用示唆しています
試験結果

4、List.Count()対List.Any()対List.Count

  • 繰り返す前に、List.Count()メソッドを使用して、ライブラリにデータがあるかどうか、またはデータが空かどうかを確認します。ここでList.Count()List.Any()メソッドの実行時間を比較してください
static void ListCountAndAny()
{
    
    
    var watch = new Stopwatch();
    var strs = new List<string>()
    {
    
    
        "Hello",
        "World",
        "CSahrp",
        "Years"
    };

    watch.Start();
    if (strs.Count() > 0) {
    
     }
    Console.WriteLine($"List.Count() {watch.Elapsed}");

    watch.Restart();
    if (strs.Any()) {
    
     }
    Console.WriteLine($"List.Any() {watch.Elapsed}");

    watch.Restart();
    if (strs.Count > 0) {
    
     }
    Console.WriteLine($"List.Count {watch.Elapsed}");
}

Count()メソッドはメソッドよりもAny()時間を節約します。ただし、Count属性を直接使用する方が時間がかかりません
試験結果

5、配列の長さ

  • 開発者はforループのArray.Length反復条件として使用する傾向がありますが、知っておく必要があるのは、反復ごとにLength属性が呼び出されることです。それを変数に格納し、その変数を反復条件として使用することをお勧めします

配列の長さは、反復条件として直接使用されます

static void ArrayLengthInLoop()
{
    
    
    var watch = new Stopwatch();
    string[] names = new[] {
    
     "Akshay", "Patel", "Panth" };
    watch.Start();
    for (int i = 0; i < names.Length; i++) {
    
     }
    Console.WriteLine($"Array.Length in the Loop: {watch.Elapsed}");
}

変数に格納され、変数を反復条件として使用する配列の長さ

static void ArrayLengthInVariable()
{
    
    
    var watch = new Stopwatch();
    string[] names = new[] {
    
     "Akshay", "Patel", "Panth" };
    watch.Start();
    int k = names.Length;
    for (int i = 0; i < k; i++) {
    
     }
    Console.WriteLine($"Array.Length in a Variable: {watch.Elapsed}");
}

初めての場合を除いて、配列の長さを取得する時間を節約し、ある程度の効率を向上させます
試験結果
テスト結果に特定のエラーがあります。参照してください。

おすすめ

転載: blog.csdn.net/qq_43562262/article/details/112076920