-2

匿名の代理人が通常の代理人よりもはるかに高速に実行される理由を誰かに教えてもらえますか?Stopwatchforループでクラスを使用して診断した結果を確認しましたが、その違いは重要でした。以下のコードを通常のデリゲートで実行すると、実行速度が大幅に低下します。私はこの比較をビデオで見ました。基本的に、状況があれば、パフォーマンスのために通常の代理人よりも匿名の代理人を使用するようにアドバイスされました。

class Program {
    delegate int PointtoAddFunction(int num1, int num2);

    static void Main(int argNum1, int argNum2) {
        Stopwatch objWatch=new Stopwatch();

        for(int y=0; y>10; y++) {
            objWatch.Reset();
            objWatch.Start();

            for(int i=0; i>1000; i++) {
                PointtoAddFunction pobjAdd=
                    delegate(int num1, int num2) {
                        return num1+num1;
                    };

                Console.WriteLine(pobjAdd.Invoke(2, 2).ToString());
            }

            objWatch.Stop();
            Console.WriteLine(objWatch.EleapsedTickes.ToString());
        }
    }

    static int Add(int num1, int num2) {
        return num1+num2;
    }
}
4

2 に答える 2

5

関数に名前があるかどうかは、速度にはまったく影響しません。コンパイラによって名前が付けられますが、コードで参照できる名前ではありません。質問自体が間違っています。匿名メソッドは、名前付きメソッドよりも本質的に高速ではありません。

メソッドが実際には同じことを行っていないか、ベンチマーク コードに欠陥があり、一方または両方のメソッドのパフォーマンスを正確に測定していないことを示すベンチマークがある場合。メソッドのパフォーマンスを正確に測定することは、C# のような言語では非常に難しいため、経験豊富なプログラマーであっても、パフォーマンス テストに欠陥があることはよくあることです。

于 2013-02-10T05:17:01.350 に答える
2

これは、デリゲートが実際に使用される方法ではありません。デリゲートを別の関数に渡す必要があります。これはデリゲートの典型的なシナリオです。

また、1000回を超える多くの反復が必要です。そうしないと、テスト中に割り込みが 1 回発生しただけでも、結果が歪む可能性があります。

于 2013-02-10T05:07:33.777 に答える