using System;
using System.Diagnostics;
static class SClass
{
public static void StatClassCall(ref long used_var)
{
used_var++;
}
}
internal interface IProgram
{
void Interface(ref long used_var);
}
internal class Base
{
public virtual void Virtual(ref long used_var)
{
used_var += 2;
}
}
internal class Program : Base, IProgram
{
const long N = 100500000;
static void Static(ref long used_var)
{
used_var++;
}
void NonStatic(ref long used_var)
{
used_var++;
}
public override void Virtual(ref long used_var)
{
used_var++;
}
public void Interface(ref long used_var)
{
used_var++;
}
private static void Main(string[] args)
{
var prog = new Program();
long result = N;
SClass.StatClassCall(ref result); // create class
Console.WriteLine("Not static: {0}", prog.NonStaticCall(ref result));
Console.WriteLine("Virtual: {0}", prog.VirtCall(ref result));
Console.WriteLine("Interface Call: {0}", prog.InterfaceCall(ref result));
Console.WriteLine("Static: {0}", prog.StaticCall(ref result));
Console.WriteLine("NNNs - {0}, {1}", result, 0);
//Console.ReadKey();
}
TimeSpan StaticCall(ref long res)
{
var sw = new Stopwatch();
sw.Start();
for (var i = N; i > 0; i--)
Static(ref res);
sw.Stop();
return sw.Elapsed;
}
TimeSpan NonStaticCall(ref long res)
{
var sw = new Stopwatch();
sw.Start();
for (var i = N; i > 0; i--)
NonStatic(ref res);
sw.Stop();
return sw.Elapsed;
}
TimeSpan VirtCall(ref long res)
{
var sw = new Stopwatch();
sw.Start();
for (var i = N; i > 0; i--)
Virtual(ref res);
sw.Stop();
return sw.Elapsed;
}
TimeSpan StatClassCall(ref long res)
{
var sw = new Stopwatch();
sw.Start();
for (var i = N; i > 0; i--)
SClass.StatClassCall(ref res);
sw.Stop();
return sw.Elapsed;
}
TimeSpan InterfaceCall(ref long res)
{
var sw = new Stopwatch();
sw.Start();
for (var i = N; i > 0; i--)
Interface(ref res);
sw.Stop();
return sw.Elapsed;
}
}