7

バックグラウンド

私が取り組んでいるソリューションに追加したいユーティリティメソッドがいくつかあり、依存性注入を使用すると、これらのメソッドのより多くの潜在的な用途が開かれます。

C#、.NET 4 を使用しています

これが私が達成しようとしているものの例です(これは単なる例です):

public static void PerformanceTest(Func<???> func, int iterations)
{
    var stopWatch = new Stopwatch();
    stopWatch.Start();
    for (int i = 0; i < iterations; i++)
    {
      var x = func();
    }
    stopWatch.Stop();

    Console.WriteLine(stopWatch.ElapsedMilliseconds);
}

ここで行ったことは、デバッグ時にコードの特定の要素のパフォーマンスをテストするメソッドを作成することです。これを使用する方法の例を次に示します。

Utilities.PerformanceTest(someObject.SomeCustomExtensionMethod(),1000000);

質問

"PerformanceTest" メソッドは、既知の型の関数が渡される (注入される) ことを想定しています。しかし、さまざまな型を返すさまざまな関数の注入を "PerformanceTest" で許可したい場合はどうすればよいでしょうか? それ、どうやったら出来るの?

4

3 に答える 3

9

ジェネリックだけじゃないの?

public static void PerformanceTest<T>(Func<T> func, int iterations)
{
    var stopWatch = Stopwatch.StartNew();
    for (int i = 0; i < iterations; i++)
    {
        T x = func();
    }
    stopWatch.Stop();

    Console.WriteLine(stopWatch.ElapsedMilliseconds);
}

また、引数の型が気にならない場合は、 を渡すFunc<object>ことができますね。

于 2012-10-11T17:08:46.577 に答える
6

PerformanceTest メソッドを次のように変更します。

public static void PerformanceTest(Action func, int iterations)

コールより終了:

Utilities.PerformanceTest(() => someObject.SomeCustomExtensionMethod(),1000000);

ラムダ式のため、おそらく時間が長くなりますが、これがどのように、または重要であるかはわかりません。

于 2012-10-11T17:12:48.337 に答える
2

ジェネリックを使用する:

public static void PerformanceTest<T>(Func<T> func, int iterations)
{
    var stopWatch = new Stopwatch();
    stopWatch.Start();
    for (int i = 0; i < iterations; i++)
    {
      var x = func();
    }
    stopWatch.Stop();

    Console.WriteLine(stopWatch.ElapsedMilliseconds);
}
于 2012-10-11T17:10:28.853 に答える