/10.CodeTuningAndOptimization/02.ComparePreformanceOfNumberTypes/ComparePreformanceOfNumberTypes.cs

https://bitbucket.org/AsenVal/kpk
C# | 208 lines | 182 code | 23 blank | 3 comment | 20 complexity | a8729b4836d04e0c98c661b26180f209 MD5 | raw file
  1. using System;
  2. using System.Diagnostics;
  3. using System.Linq;
  4. namespace _02.ComparePreformanceOfNumberTypes
  5. {
  6. public class ComparePreformanceOfNumberTypes
  7. {
  8. public static void DisplayPerformance(Action method, string methodName)
  9. {
  10. Console.WriteLine(methodName + " starting: ");
  11. Stopwatch timer = new Stopwatch();
  12. timer.Start();
  13. method();
  14. timer.Stop();
  15. Console.WriteLine(methodName + " finished: " + timer.Elapsed.TotalMilliseconds + "ms");
  16. }
  17. public static void AdditionIntComparison(int startValue, int numberOfRepeating)
  18. {
  19. for (int i = 0; i < numberOfRepeating; i++)
  20. {
  21. startValue += 2;
  22. }
  23. }
  24. public static void AdditionLongComparison(long startValue, int numberOfRepeating)
  25. {
  26. for (int i = 0; i < numberOfRepeating; i++)
  27. {
  28. startValue += 2L;
  29. }
  30. }
  31. public static void AdditionFloatComparison(float startValue, int numberOfRepeating)
  32. {
  33. for (int i = 0; i < numberOfRepeating; i++)
  34. {
  35. startValue += 2.1F;
  36. }
  37. }
  38. public static void AdditionDoubleComparison(double startValue, int numberOfRepeating)
  39. {
  40. for (int i = 0; i < numberOfRepeating; i++)
  41. {
  42. startValue += 2.1;
  43. }
  44. }
  45. public static void AdditionDecimalComparison(decimal startValue, int numberOfRepeating)
  46. {
  47. for (int i = 0; i < numberOfRepeating; i++)
  48. {
  49. startValue += 2.1M;
  50. }
  51. }
  52. //Subtraction
  53. public static void SubtractionIntComparison(int startValue, int numberOfRepeating)
  54. {
  55. for (int i = 0; i < numberOfRepeating; i++)
  56. {
  57. startValue -= 2;
  58. }
  59. }
  60. public static void SubtractionLongComparison(long startValue, int numberOfRepeating)
  61. {
  62. for (int i = 0; i < numberOfRepeating; i++)
  63. {
  64. startValue -= 2L;
  65. }
  66. }
  67. public static void SubtractionFloatComparison(float startValue, int numberOfRepeating)
  68. {
  69. for (int i = 0; i < numberOfRepeating; i++)
  70. {
  71. startValue -= 2.1F;
  72. }
  73. }
  74. public static void SubtractionDoubleComparison(double startValue, int numberOfRepeating)
  75. {
  76. for (int i = 0; i < numberOfRepeating; i++)
  77. {
  78. startValue -= 2.1;
  79. }
  80. }
  81. public static void SubtractionDecimalComparison(decimal startValue, int numberOfRepeating)
  82. {
  83. for (int i = 0; i < numberOfRepeating; i++)
  84. {
  85. startValue -= 2.1M;
  86. }
  87. }
  88. // multiplication
  89. public static void MultiplicationIntComparison(int startValue, int numberOfRepeating)
  90. {
  91. for (int i = 0; i < numberOfRepeating; i++)
  92. {
  93. startValue = 5 * 2;
  94. }
  95. }
  96. public static void MultiplicationLongComparison(long startValue, int numberOfRepeating)
  97. {
  98. for (int i = 0; i < numberOfRepeating; i++)
  99. {
  100. startValue = 5L * 2L; ;
  101. }
  102. }
  103. public static void MultiplicationFloatComparison(float startValue, int numberOfRepeating)
  104. {
  105. for (int i = 0; i < numberOfRepeating; i++)
  106. {
  107. startValue = 5.3f * 2.1f;
  108. }
  109. }
  110. public static void MultiplicationDoubleComparison(double startValue, int numberOfRepeating)
  111. {
  112. for (int i = 0; i < numberOfRepeating; i++)
  113. {
  114. startValue = 5.3 * 2.1;
  115. }
  116. }
  117. public static void MultiplicationDecimalComparison(decimal startValue, int numberOfRepeating)
  118. {
  119. for (int i = 0; i < numberOfRepeating; i++)
  120. {
  121. startValue = 5.3M * 2.1M;
  122. }
  123. }
  124. //Division
  125. public static void DivisionIntComparison(int startValue, int numberOfRepeating)
  126. {
  127. for (int i = 0; i < numberOfRepeating; i++)
  128. {
  129. startValue = 100 / 2;
  130. }
  131. }
  132. public static void DivisionLongComparison(long startValue, int numberOfRepeating)
  133. {
  134. for (int i = 0; i < numberOfRepeating; i++)
  135. {
  136. startValue = 100L / 2L;
  137. }
  138. }
  139. public static void DivisionFloatComparison(float startValue, int numberOfRepeating)
  140. {
  141. for (int i = 0; i < numberOfRepeating; i++)
  142. {
  143. startValue = 100.6f / 2.3F;
  144. }
  145. }
  146. public static void DivisionDoubleComparison(double startValue, int numberOfRepeating)
  147. {
  148. for (int i = 0; i < numberOfRepeating; i++)
  149. {
  150. startValue = 100.6 / 2.3;
  151. }
  152. }
  153. public static void DivisionDecimalComparison(decimal startValue, int numberOfRepeating)
  154. {
  155. for (int i = 0; i < numberOfRepeating; i++)
  156. {
  157. startValue = 100.6M / 2.3M;
  158. }
  159. }
  160. public static void Main()
  161. {
  162. int repeatingNumber = 100000;
  163. DisplayPerformance(() => AdditionIntComparison(2, repeatingNumber), "Addition Int Comparison");
  164. DisplayPerformance(() => AdditionLongComparison(2L, repeatingNumber), "Addition Long Comparison");
  165. DisplayPerformance(() => AdditionFloatComparison(2.0F, repeatingNumber), "Addition Float Comparison");
  166. DisplayPerformance(() => AdditionDoubleComparison(2.1, repeatingNumber), "Addition Double Comparison");
  167. DisplayPerformance(() => AdditionDecimalComparison(2.1M, repeatingNumber), "Addition Decimal Comparison");
  168. DisplayPerformance(() => SubtractionIntComparison(repeatingNumber + 2, repeatingNumber), "Subtraction Int Comparison");
  169. DisplayPerformance(() => SubtractionLongComparison(repeatingNumber + 2L, repeatingNumber), "Subtraction Long Comparison");
  170. DisplayPerformance(() => SubtractionFloatComparison(repeatingNumber + 2.0F, repeatingNumber), "Subtraction Float Comparison");
  171. DisplayPerformance(() => SubtractionDoubleComparison(repeatingNumber + 2.1, repeatingNumber), "Subtraction Double Comparison");
  172. DisplayPerformance(() => SubtractionDecimalComparison(repeatingNumber + 2.1M, repeatingNumber), "Subtraction Decimal Comparison");
  173. DisplayPerformance(() => MultiplicationIntComparison(2, repeatingNumber), "Multiplication Int Comparison");
  174. DisplayPerformance(() => MultiplicationLongComparison(2L, repeatingNumber), "Multiplication Long Comparison");
  175. DisplayPerformance(() => MultiplicationFloatComparison(2.0F, repeatingNumber), "Multiplication Float Comparison");
  176. DisplayPerformance(() => MultiplicationDoubleComparison(2.1, repeatingNumber), "Multiplication Double Comparison");
  177. DisplayPerformance(() => MultiplicationDecimalComparison(2.1M, repeatingNumber), "Multiplication Decimal Comparison");
  178. DisplayPerformance(() => DivisionIntComparison(repeatingNumber + 2, repeatingNumber), "Division Int Comparison");
  179. DisplayPerformance(() => DivisionLongComparison(repeatingNumber + 2L, repeatingNumber), "Division Long Comparison");
  180. DisplayPerformance(() => DivisionFloatComparison(repeatingNumber + 2.0F, repeatingNumber), "Division Float Comparison");
  181. DisplayPerformance(() => DivisionDoubleComparison(repeatingNumber + 2.1, repeatingNumber), "Division Double Comparison");
  182. DisplayPerformance(() => DivisionDecimalComparison(repeatingNumber + 2.1M, repeatingNumber), "Division Decimal Comparison");
  183. }
  184. }
  185. }