Advertisement
Guest User

Untitled

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