-2

有人能告诉我为什么匿名代表比普通代表跑得快很多吗?我在 for 循环中看到了用类进行诊断的结果,Stopwatch并且差异很大。如果您在普通委托中运行以下代码,它的运行速度会慢很多。我在视频上看到了这个比较,基本上我被建议在有情况的情况下使用匿名代表而不是普通代表来提高性能。

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 次迭代。否则,即使在测试期间发生的单个中断也会影响结果。

于 2013-02-10T05:07:33.777 回答