Advertisement
NLinker

The test to to compare named and positional arguments

Jan 30th, 2014
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.41 KB | None | 0 0
  1. using System;
  2. using System.Diagnostics;
  3.  
  4. class Base {
  5.     public virtual void f(int size, string name, bool flag)
  6.     {
  7.         Program.Method3(flag: true, size: 1, name: "Perl");
  8.     }
  9. }
  10. class Derived : Base {
  11.     public override void f(int size, string name, bool flag)
  12.     {
  13.         Program.Method3(flag: true, size: 1, name: "Perl");
  14.     }
  15. }
  16.  
  17. class Program
  18. {
  19.  
  20.     const int _max = 100000000;
  21.     static void Main()
  22.     {
  23.         var b = new Derived();
  24.         Method1(b);
  25.         Method2(b);
  26.  
  27.         var s0 = Stopwatch.StartNew();
  28.         for (int i = 0; i < _max; i++)
  29.         {
  30.             Method1(b);
  31.         }
  32.         for (int i = 0; i < _max; i++)
  33.         {
  34.             Method2(b);
  35.         }
  36.         s0.Stop();
  37.         // begin real test
  38.         var s1 = Stopwatch.StartNew();
  39.         for (int i = 0; i < _max; i++)
  40.         {
  41.             Method1(b);
  42.         }
  43.         s1.Stop();
  44.         var s2 = Stopwatch.StartNew();
  45.         for (int i = 0; i < _max; i++)
  46.         {
  47.             Method2(b);
  48.         }
  49.         s2.Stop();
  50.         // begin real test reversed order
  51.         var s4 = Stopwatch.StartNew();
  52.         for (int i = 0; i < _max; i++)
  53.         {
  54.             Method2(b);
  55.         }
  56.         s4.Stop();
  57.         var s3 = Stopwatch.StartNew();
  58.         for (int i = 0; i < _max; i++)
  59.         {
  60.             Method1(b);
  61.         }
  62.         s3.Stop();
  63.         Console.WriteLine("1 named: {0}", ((double)(s1.Elapsed.TotalMilliseconds * 1000 * 1000) /
  64.             _max).ToString("0.00 ns"));
  65.         Console.WriteLine("1 raw  : {0}", ((double)(s2.Elapsed.TotalMilliseconds * 1000 * 1000) /
  66.             _max).ToString("0.00 ns"));
  67.         Console.WriteLine("2 named: {0}", ((double)(s3.Elapsed.TotalMilliseconds * 1000 * 1000) /
  68.             _max).ToString("0.00 ns"));
  69.         Console.WriteLine("2 raw  : {0}", ((double)(s4.Elapsed.TotalMilliseconds * 1000 * 1000) /
  70.             _max).ToString("0.00 ns"));
  71.         Console.Read();
  72.     }
  73.  
  74.     static void Method1(Base b)
  75.     {
  76.         // Method3(flag: true, size: 1, name: "Perl");
  77.         b.f(flag: true, size: 1, name: "Perl");
  78.     }
  79.  
  80.     static void Method2(Base b)
  81.     {
  82.         // Method3(1, "Perl", true);
  83.         b.f(1, "Perl", true);
  84.     }
  85.  
  86.     public static void Method3(int size, string name, bool flag)
  87.     {
  88.         if (!flag && size != -1 && name != null)
  89.         {
  90.             throw new Exception();
  91.         }
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement