Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Debug:
- //
- // TestStringBuilderChars: 0.8 (ticks: 2833)
- // TestStringDirectChars: 25624 (ticks: 82820974)
- // TestOptimizedPerfChars: 0.5 (ticks: 1901)
- // TestStringBuilderStrings: 4 (ticks: 13111)
- // TestStringDirectStrings: 13.2 (ticks: 42725)
- // TestOptimizedMemStrings: 5.7 (ticks: 18480)
- //
- // Release:
- //
- // TestStringBuilderChars: 0.6 (ticks: 2085)
- // TestStringDirectChars: 6192 (ticks: 20014990)
- // TestOptimizedPerfChars: 0.5 (ticks: 1626)
- // TestStringBuilderStrings: 3.2 (ticks: 10524)
- // TestStringDirectStrings: 6.8 (ticks: 22054)
- // TestOptimizedMemStrings: 4.9 (ticks: 16034)
- public class Program
- {
- private readonly Random _rnd = new Random(0);
- private readonly List<string> _strings = Enumerable.Range(10000, 100).Select(i => i.ToString()).ToList();
- public static void Main () => new Program().Run();
- public void Run ()
- {
- Benchmark(TestStringBuilderChars, nameof(TestStringBuilderChars));
- Benchmark(TestStringDirectChars, nameof(TestStringDirectChars), 2);
- Benchmark(TestOptimizedPerfChars, nameof(TestOptimizedPerfChars));
- Benchmark(TestStringBuilderStrings, nameof(TestStringBuilderStrings));
- Benchmark(TestStringDirectStrings, nameof(TestStringDirectStrings));
- Benchmark(TestOptimizedMemStrings, nameof(TestOptimizedMemStrings));
- Console.WriteLine("Done!");
- Console.ReadLine();
- }
- public void TestStringBuilderChars ()
- {
- var sb = new StringBuilder();
- for (int i = 0; i < 100000; i++)
- sb.Append((char)(i % char.MaxValue));
- sb.ToString();
- }
- public void TestStringDirectChars ()
- {
- StringDirect sb = "";
- for (int i = 0; i < 100000; i++)
- sb += (char)(i % char.MaxValue);
- sb.ToString();
- }
- public void TestOptimizedPerfChars ()
- {
- char[] sb = new char[100000];
- for (int i = 0; i < sb.Length; i++)
- sb[i] = (char)(i % char.MaxValue);
- new string(sb);
- }
- public void TestStringBuilderStrings ()
- {
- var sb = new StringBuilder();
- for (int i = 0; i < 100000; i++)
- sb.Append(_strings[_rnd.Next(_strings.Count)]);
- sb.ToString();
- }
- public void TestStringDirectStrings ()
- {
- StringDirect sb = "";
- for (int i = 0; i < 100000; i++)
- sb += _strings[_rnd.Next(_strings.Count)];
- sb.ToString();
- }
- public void TestOptimizedMemStrings ()
- {
- var sb = new List<string>(100000);
- for (int i = 0; i < 100000; i++)
- sb.Add(_strings[_rnd.Next(_strings.Count)]);
- string.Concat(sb);
- }
- private void Benchmark (Action test, string name, int count = 10)
- {
- var sw = new Stopwatch();
- test();
- for (int i = 0; i < count; i++) {
- sw.Start();
- test();
- sw.Stop();
- Console.Write("+");
- }
- Console.WriteLine();
- Console.WriteLine($"{name}: {(double)sw.ElapsedMilliseconds / count} (ticks: {sw.ElapsedTicks / count})");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement