// Attempt to compare virtual and interface call efficiency. // 2002-04-21: Running Microsoft CLR .NET Framework version 1.0.3705 // from January 2002 under Win2000 under VMWare 3.0 under Linux on a // 850 MHz Mobile P3: // invokevirtual: 2.43 sec // invokeinterface: 2.35 sec // Rather strange that invokeinterface is faster than invokevirtual. using System; class Invokevirtual { static B1 o1 = new B1(); static B1 o2 = new B2(); static void Main(string[] args) { int count = int.Parse(args[0]); int res = 13; { Timer t = new Timer(); for (int i=0; i=0 ? o1 : o1; } } interface A { int m(); } class B1 : A { protected int k; public virtual int m() { return k++; } } class B2 : B1 { public override int m() { return ++k; } } // Crude timing utility ---------------------------------------- public class Timer { private DateTime start; public Timer() { start = DateTime.Now; } public double Check() { TimeSpan dur = DateTime.Now - start; return dur.TotalSeconds; } }