0

私は.netアプリで作業しており、5つのリストと1つのハッシュテーブルで構成されるオブジェクトを使用しています。このオブジェクトは、分析を実行するために少なくとも500回繰り返されるループ内で使用されます。各ループでこのオブジェクトは空で開始する必要があるので、すべてのリストとハッシュテーブルでclearを呼び出す方が効率的か、それともオブジェクトを再初期化するだけでよいのか疑問に思いました。

これをベンチマークするコードを書くことができることは知っていますが、誰かがすでにこの道を進んでいるのではないかと思いますか?

ありがとう。

4

2 に答える 2

6

3000個の空のコレクションを作成するコストはごくわずかです。あなたの「分析」が本当に些細なことでない限り、これはまったく重要ではありません。できる限り明確なコードを記述します。これは、コレクションを再利用するのではなく、毎回新しいコレクションのセットを作成する可能性があります。論理操作がオブジェクトを再利用する場合にのみ、オブジェクトを再利用する必要があります。

最も読みやすい方法でコードを記述したら、必要なパフォーマンスを発揮するかどうかをテストします。そうでない場合は、マイクロ最適化を開始できます。

ただし、の代わりにを使用することを強くお勧めします。Dictionary<,>Hashtable

于 2012-04-24T12:31:21.460 に答える
5

これはマイクロ最適化であるという他の回答にも同意しますが、質問に回答するために、リストを使用する場合、新しいリストはクリアよりもわずかに高速であることがわかりました。これが私のベンチマークコードです:

static void Main(string[] args)
    {
        var start = DateTime.Now;
        List<string> lst = new List<string>();

        for (int i = 0; i < 3000; ++i)
        {
            //lst = new List<string>();
            lst.Clear();
            for (int j = 0; j < 500; ++j)
            {
                lst.Add(j.ToString());
            }
        }

        Console.WriteLine("{0} ms", ((DateTime.Now - start).Ticks / TimeSpan.TicksPerMillisecond));
        Console.ReadLine();
    }

5回の実行で、新しいリストの平均は340.8ミリ秒、クリアの平均は354.8ミリ秒でした。

ただし、この結果は非常に近いため、次のことが明らかです。

  1. 違いはおそらく無意味です
  2. 私はおそらくこのベンチマークを実行することによって私の時間を無駄にしました
于 2012-04-24T12:43:01.420 に答える