0

.equals("")と を比較するにはどうすればよい.IsNullOrEmptyですか? どちらが速いか知りたいです。ティックの使用については聞いたことがありますが、これをコーディングする方法にはまだ慣れていません。

4

4 に答える 4

1

このクラスを使用してStopWatch、コードの実行時間を測定できます。ストップウォッチを開始し、数千回の反復を実行し、停止して経過時間を確認します。他の実装についても同じことを行います。また、比較nullや空の文字列、さらには非常に長い文字列など、いくつかの特殊なケースを試してみてください。"foo"を何十回も比較するだけでは、""何も証明されません。

ただし、答えは問題とはまったく無関係である可能性が非常に高いことに注意してください。コードの他の部分の改善に時間を費やすほうがよいでしょう。

于 2012-06-22T06:22:03.850 に答える
1

特別な目的であるため、isNullOrEmpty の方が高速である可能性があります。ただし、コメントした他の人が指摘しているように、これは非常に些細な最適化です。

于 2012-06-22T06:22:12.963 に答える
1

次の方法で使用StopWatchします。

// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();

// Begin timing
stopwatch.Start();

// Do something here

// Stop timing
stopwatch.Stop();
于 2012-06-22T06:24:10.557 に答える
1

他の人が言ったように、これは時期尚早の最適化であり、おそらくあなたの時間の価値はありません. しかし、答えのために、これはあなたがそれを行う方法です:

using System;
using System.Diagnostics;

namespace ConsoleApplication1 {   
    class Program {   
        static void Main(string[] args) {
            int COUNT = 1000000000;
            String str = "Something";

            Stopwatch sw = Stopwatch.StartNew();
            sw.Start();
            for (int i = 0; i < COUNT; i++) {
                if (str.Equals("")) {
                }
            }
            Console.WriteLine(sw.ElapsedTicks);

            sw = Stopwatch.StartNew();
            sw.Start();
            for (int i = 0; i < COUNT; i++) {
                if (String.IsNullOrEmpty(str)) {
                }
            }
            Console.WriteLine(sw.ElapsedTicks);

            Console.ReadLine();
        }
    }
}

出力は私のためです:

21426768  // Equals("")
12365410  // IsNullOrEmpty() <-- faster

そうしないstr.Equals("")String.IsNullOrEmpty(str)、同じ結果が得られません。明らかに、最初のものは NullReferenceException is stris null を発生させます。

于 2012-06-22T07:46:02.110 に答える