有人可以告诉我为什么匿名代表的运行速度比普通代表快得多吗?我在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;
}
}
答案 0 :(得分:5)
函数是否具有名称并不会影响它的速度。它将由编译器给出一个名称,它不是您可以在代码中引用的名称。问题本身存在缺陷。匿名方法本身并不比命名方法快。
如果你有一个基准测试,否则这些方法实际上并没有做同样的事情,或者基准测试代码存在缺陷,并且没有准确地测量一种或两种方法的性能。准确测量方法的性能在C#这样的语言中非常难以实现,因此即使对于有经验的程序员来说,有缺陷的性能测试仍然非常。
答案 1 :(得分:2)
这不是代表们实际使用的方式。您应该将委托传递给单独的函数;这是代表的典型场景。
您还需要超过1000次迭代。否则,即使测试期间发生的单个中断也会导致结果偏差。