using System.Diagnostics;
public static void Main()
Console.WriteLine("Static call");
MeasureTime(TestStaticCall);
Console.WriteLine("Instance call");
MeasureTime(TestInstanceCall);
private static void TestStaticCall()
StaticBaseOne.StaticBaseTwo.StaticChild.DoNothing();
private static void TestInstanceCall()
InstanceBaseOne.InstanceBaseTwo.InstanceChild.DoNothing();
private static void MeasureTime(Action action)
var stopWatch = new Stopwatch();
for (int i = 0; i < 1000000; i++)
Console.WriteLine(stopWatch.ElapsedMilliseconds);
namespace StaticBaseOne.StaticBaseTwo
static class StaticChild {
public static void DoNothing() { }
public static class InstanceBaseOne
public static InstanceBaseTwo InstanceBaseTwo { get; } = new InstanceBaseTwo();
public class InstanceBaseTwo
public InstanceChild InstanceChild { get; } = new InstanceChild();
public class InstanceChild
public void DoNothing() { }