Advertisement
Guest User

Untitled

a guest
Aug 19th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.16 KB | None | 0 0
  1.     //[ShortRunJob]
  2.     [RankColumn]
  3.     [DisassemblyDiagnoser(true, true, true, false, 3, true)]
  4.     public class Program
  5.     {
  6.         public static Dictionary<int, object> randomHeapAllocations = new Dictionary<int, object>();
  7.         private static IStruct[] IStructArr = new IStruct[100000];
  8.         private static SomeStruct[] StuctArr = new SomeStruct[100000];
  9.         private static IClass[] IClassArr = new IClass[100000];
  10.         private static SomeClass[] ClassArr = new SomeClass[100000];
  11.  
  12.         static Program()
  13.         {
  14.             for (int i = 0; i < IStructArr.Length; i++)
  15.             {
  16.                 IStructArr[i] = new SomeStruct();
  17.                 StuctArr[i] = new SomeStruct();
  18.                 IClassArr[i] = new SomeClass();
  19.                 ClassArr[i] = new SomeClass();
  20.                 randomHeapAllocations[i] = new byte[20000];
  21.                 randomHeapAllocations[i + 100000] = new SomeStruct();
  22.             }
  23.         }
  24.  
  25.         public void Iterate<T>(T[] arr)
  26.             where T : IStruct
  27.         {
  28.             for (int i = 0; i < arr.Length; i++)
  29.             {
  30.                 arr[i].X = new Vector3(10);
  31.             }
  32.         }
  33.  
  34.         [Benchmark]
  35.         public void StuctArrNoInterface()
  36.         {
  37.             for (int i = 0; i < StuctArr.Length; i++)
  38.             {
  39.                 ref var f = ref StuctArr[i];
  40.                 f.X = new Vector3(10);
  41.             }
  42.         }
  43.  
  44.         [Benchmark]
  45.         public void StructArrInterfaceCast()
  46.         {
  47.             for (int i = 0; i < StuctArr.Length; i++)
  48.             {
  49.                 var f = (IStruct)StuctArr[i];
  50.                 f.X = new Vector3(10);
  51.                 StuctArr[i] = (SomeStruct)f;
  52.             }
  53.         }
  54.  
  55.         [Benchmark]
  56.         public void StructArrInterface()
  57.         {
  58.             for (int i = 0; i < IStructArr.Length; i++)
  59.             {
  60.                 var f = IStructArr[i];
  61.                 f.X = new Vector3(10);
  62.             }
  63.         }
  64.  
  65.         [Benchmark]
  66.         public void StuctArrInterfaceConstraint()
  67.         {
  68.             Iterate(StuctArr);
  69.         }
  70.  
  71.         [Benchmark]
  72.         public void ClassArrNoInterface()
  73.         {
  74.             for (int i = 0; i < ClassArr.Length; i++)
  75.             {
  76.                 ClassArr[i].X = new Vector3(10);
  77.             }
  78.         }
  79.  
  80.         [Benchmark]
  81.         public void ClassArrInterfaceCast()
  82.         {
  83.             for (int i = 0; i < ClassArr.Length; i++)
  84.             {
  85.                 var f = (IClass)ClassArr[i];
  86.                 f.X = new Vector3(10);
  87.                 ClassArr[i] = (SomeClass)f;
  88.             }
  89.         }
  90.  
  91.         [Benchmark]
  92.         public void ClassArrInterface()
  93.         {
  94.             for (int i = 0; i < IClassArr.Length; i++)
  95.             {
  96.                 IClassArr[i].X = new Vector3(10);
  97.             }
  98.         }
  99.  
  100.         public static void Main(string[] args)
  101.         {
  102.             //new Program().StuctArrInterfaceConstraint();
  103.             var summary = BenchmarkRunner.Run<Program>();
  104.             //Window.OpenWindow("Zup");
  105.             //Renderer.Init();
  106.             //Input.Init();
  107.             //Assets.Init();
  108.             //Time.Init();
  109.             //TestGame.Init();
  110.             //GameLoop.RunGameLoop();
  111.         }
  112.  
  113.         public interface IClass
  114.         {
  115.             Vector3 X { get; set; }
  116.         }
  117.  
  118.         public class SomeClass : IClass
  119.         {
  120.             public Vector3 X;
  121.  
  122.             Vector3 IClass.X
  123.             {
  124.                 [MethodImpl(MethodImplOptions.AggressiveInlining)]
  125.                 get => this.X;
  126.  
  127.                 [MethodImpl(MethodImplOptions.AggressiveInlining)]
  128.                 set => this.X = value;
  129.             }
  130.         }
  131.  
  132.         public interface IStruct
  133.         {
  134.             Vector3 X { get; set; }
  135.         }
  136.  
  137.         public struct SomeStruct : IStruct
  138.         {
  139.             public Vector3 X;
  140.  
  141.             Vector3 IStruct.X
  142.             {
  143.                 [MethodImpl(MethodImplOptions.AggressiveInlining)]
  144.                 get => this.X;
  145.  
  146.                 [MethodImpl(MethodImplOptions.AggressiveInlining)]
  147.                 set => this.X = value;
  148.             }
  149.         }
  150.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement