fork download
  1. using System;
  2. using static System.Console;
  3. using System.Diagnostics;
  4. using System.Text;
  5.  
  6. public class Program {
  7. const int Limit = 1000;
  8. static int[] dataInt = new int[Limit];
  9. static string[] dataString = new string[Limit];
  10.  
  11. public static void Main() {
  12. for (int i = 0; i < Limit; i++) {
  13. dataInt[i] = i;
  14. dataString[i] = i.ToString();
  15. }
  16. Time(ConcatenationInt);
  17. Time(JunctionInt);
  18. Time(BuilderInt);
  19. Time(AdditionInt);
  20. Time(ConcatenationString);
  21. Time(JunctionString);
  22. Time(BuilderString);
  23. Time(AdditionString);
  24. }
  25.  
  26. static void Time(Func<int> action) {
  27. var sw = Stopwatch.StartNew();
  28. int result = action();
  29. sw.Stop();
  30. WriteLine($"{result} - {sw.ElapsedTicks:000,000,000} - {action.Method.Name}");
  31. GC.Collect();
  32. GC.WaitForPendingFinalizers();
  33. }
  34.  
  35. static int AdditionInt() {
  36. var tmp = "";
  37. for (int i = 0; i < Limit; i++) tmp += dataInt[i];
  38. return tmp.Length;
  39. }
  40.  
  41. static int AdditionString() {
  42. var tmp = "";
  43. for (int i = 0; i < Limit; i++) tmp += dataString[i];
  44. return tmp.Length;
  45. }
  46.  
  47. static int ConcatenationInt() => string.Concat(dataInt).Length;
  48.  
  49. static int ConcatenationString() => string.Concat(dataString).Length;
  50.  
  51. static int JunctionInt() => string.Join("", dataInt).Length;
  52.  
  53. static int JunctionString() => string.Join("", dataString).Length;
  54.  
  55. static int BuilderInt() {
  56. var tmp = new StringBuilder();
  57. for (int i = 0; i < Limit; i++) tmp.Append(dataInt[i]);
  58. return tmp.Length;
  59. }
  60.  
  61. static int BuilderString() {
  62. var tmp = new StringBuilder();
  63. for (int i = 0; i < Limit; i++) tmp.Append(dataString[i]);
  64. return tmp.Length;
  65. }
  66. }
  67.  
  68. //https://pt.stackoverflow.com/q/191264/101
Success #stdin #stdout 0.03s 20720KB
stdin
Standard input is empty
stdout
2890 - 000,018,245 - ConcatenationInt
2890 - 000,006,639 - JunctionInt
2890 - 000,004,906 - BuilderInt
2890 - 000,015,904 - AdditionInt
2890 - 000,001,205 - ConcatenationString
2890 - 000,001,097 - JunctionString
2890 - 000,001,253 - BuilderString
2890 - 000,008,370 - AdditionString