Advertisement
Guest User

Wholemy StringDirect is a joke

a guest
Nov 9th, 2015
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.48 KB | None | 0 0
  1.     // Debug:
  2.     //
  3.     // TestStringBuilderChars:   0.8   (ticks: 2833)
  4.     // TestStringDirectChars:    25624 (ticks: 82820974)
  5.     // TestOptimizedPerfChars:   0.5   (ticks: 1901)
  6.     // TestStringBuilderStrings: 4     (ticks: 13111)
  7.     // TestStringDirectStrings:  13.2  (ticks: 42725)
  8.     // TestOptimizedMemStrings:  5.7   (ticks: 18480)
  9.     //
  10.     // Release:
  11.     //
  12.     // TestStringBuilderChars:   0.6   (ticks: 2085)
  13.     // TestStringDirectChars:    6192  (ticks: 20014990)
  14.     // TestOptimizedPerfChars:   0.5   (ticks: 1626)
  15.     // TestStringBuilderStrings: 3.2   (ticks: 10524)
  16.     // TestStringDirectStrings:  6.8   (ticks: 22054)
  17.     // TestOptimizedMemStrings:  4.9   (ticks: 16034)
  18.  
  19.     public class Program
  20.     {
  21.         private readonly Random _rnd = new Random(0);
  22.         private readonly List<string> _strings = Enumerable.Range(10000, 100).Select(i => i.ToString()).ToList();
  23.  
  24.         public static void Main () => new Program().Run();
  25.  
  26.         public void Run ()
  27.         {
  28.             Benchmark(TestStringBuilderChars, nameof(TestStringBuilderChars));
  29.             Benchmark(TestStringDirectChars, nameof(TestStringDirectChars), 2);
  30.             Benchmark(TestOptimizedPerfChars, nameof(TestOptimizedPerfChars));
  31.             Benchmark(TestStringBuilderStrings, nameof(TestStringBuilderStrings));
  32.             Benchmark(TestStringDirectStrings, nameof(TestStringDirectStrings));
  33.             Benchmark(TestOptimizedMemStrings, nameof(TestOptimizedMemStrings));
  34.             Console.WriteLine("Done!");
  35.             Console.ReadLine();
  36.         }
  37.  
  38.         public void TestStringBuilderChars ()
  39.         {
  40.             var sb = new StringBuilder();
  41.             for (int i = 0; i < 100000; i++)
  42.                 sb.Append((char)(i % char.MaxValue));
  43.             sb.ToString();
  44.         }
  45.  
  46.         public void TestStringDirectChars ()
  47.         {
  48.             StringDirect sb = "";
  49.             for (int i = 0; i < 100000; i++)
  50.                 sb += (char)(i % char.MaxValue);
  51.             sb.ToString();
  52.         }
  53.  
  54.         public void TestOptimizedPerfChars ()
  55.         {
  56.             char[] sb = new char[100000];
  57.             for (int i = 0; i < sb.Length; i++)
  58.                 sb[i] = (char)(i % char.MaxValue);
  59.             new string(sb);
  60.         }
  61.  
  62.         public void TestStringBuilderStrings ()
  63.         {
  64.             var sb = new StringBuilder();
  65.             for (int i = 0; i < 100000; i++)
  66.                 sb.Append(_strings[_rnd.Next(_strings.Count)]);
  67.             sb.ToString();
  68.         }
  69.  
  70.         public void TestStringDirectStrings ()
  71.         {
  72.             StringDirect sb = "";
  73.             for (int i = 0; i < 100000; i++)
  74.                 sb += _strings[_rnd.Next(_strings.Count)];
  75.             sb.ToString();
  76.         }
  77.  
  78.         public void TestOptimizedMemStrings ()
  79.         {
  80.             var sb = new List<string>(100000);
  81.             for (int i = 0; i < 100000; i++)
  82.                 sb.Add(_strings[_rnd.Next(_strings.Count)]);
  83.             string.Concat(sb);
  84.         }
  85.  
  86.         private void Benchmark (Action test, string name, int count = 10)
  87.         {
  88.             var sw = new Stopwatch();
  89.             test();
  90.             for (int i = 0; i < count; i++) {
  91.                 sw.Start();
  92.                 test();
  93.                 sw.Stop();
  94.                 Console.Write("+");
  95.             }
  96.             Console.WriteLine();
  97.             Console.WriteLine($"{name}: {(double)sw.ElapsedMilliseconds / count} (ticks: {sw.ElapsedTicks / count})");
  98.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement