[Этюд, performance] Угадайка
От: Sinix  
Дата: 04.03.11 07:33
Оценка: 189 (13)
Сколько, по-вашему, займёт выполнение кусков кода (1) и (2)?

    private static int Compare(int a, int b, Func<int, int, int> comparison)
    {
      return comparison(a, b);
    }

    [STAThread]
    public static void Main(string[] args)
    {
      int repeatCount = 10 * 1000 * 1000;
      IComparer<int> comparer = Comparer<int>.Default;

      Measure("Callback", () => // (1)
      {
        for (int i = 0; i < repeatCount; i++)
        {
          Compare(i, 123, comparer.Compare);
        }
      });

      Measure("Lambda callback", () => // (2)
      {
        for (int i = 0; i < repeatCount; i++)
        {
          Compare(i, 123, (a, b) => comparer.Compare(a, b));
        }
      });

      Console.WriteLine();
      Console.Write("Done. Press any key to exit...");
      Console.ReadKey();
    }

    private static void Measure(string name, Action callback)
    {
      Stopwatch sw = Stopwatch.StartNew();
      callback();
      sw.Stop();
      Console.WriteLine("{0,16}: {1,8 :#,##0.0###} ms", name, sw.ElapsedMilliseconds);
    }


  Не подглядывать!
        Callback:  3 190,0 ms
 Lambda callback:    116,0 ms

Done. Press any key to exit...

Чтобы сохранить хоть какую-то интригу, подожду ваших объяснений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.