Я написал два простых приложения:
1. один, использующий анонимные методы, и
2. один с использованием простых методов.
Каждый из перечисленных методов выполняет простое действие:
int add(int n1, int n2) {return n1+n2}
И я вызываю простой цикл for
, который вызовет метод add
10000 раз. Реализация с использованием анонимных методов занимает намного меньше времени, чем другие. Зачем? Это потому, что JITter содержит анонимные методы?
delegate int ADD( int i1, int i2 );
private void button1_Click( object sender, EventArgs e )
{
Stopwatch watch = new Stopwatch();
watch.Reset();
watch.Start();
for( int i = 0 ; i < 10000 ; i++ )
{
add( i, i );
}
watch.Stop();
Console.WriteLine("Normal Call " + watch.ElapsedTicks);
watch.Reset();
watch.Start();
for( int i = 0 ; i < 10000 ; i++ )
{
ADD p = delegate( int n1, int n2 )
{
return n1 + n2;
};
p.Invoke( i, i );
}
watch.Stop();
Console.WriteLine( watch.ElapsedTicks );
Console.ReadLine();
}
int add(int n1, int n2)
{
return n1 + n2;
}
}
Результат - в режиме выпуска - скомпилировать на x64 (пару раз нажал на кнопку действия):
Normal 1525
1275
Normal 480
477
Normal 371
370
Normal 372
371
Normal 477
479
Normal 477
477
Normal 564
702
Normal 478
476