- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Diagnostics;
- namespace forgetCode
- {
- class Program
- {
- delegate string StringDelegate(string s);
- static void Benchmark(string description, StringDelegate d, int times, string text)
- {
- Stopwatch sw = new Stopwatch();
- sw.Start();
- for (int j = 0; j < times; j++)
- {
- d(text);
- }
- sw.Stop();
- Console.WriteLine("{0} Ticks {1} : called {2} times.", sw.ElapsedTicks, description, times);
- }
- public static string ReverseXor(string s)
- {
- char[] charArray = s.ToCharArray();
- int len = s.Length - 1;
- for (int i = 0; i < len; i++, len--)
- {
- charArray[i] ^= charArray[len];
- charArray[len] ^= charArray[i];
- charArray[i] ^= charArray[len];
- }
- return new string(charArray);
- }
- public static string ReverseSB(string text)
- {
- StringBuilder builder = new StringBuilder(text.Length);
- for (int i = text.Length - 1; i >= 0; i--)
- {
- builder.Append(text[i]);
- }
- return builder.ToString();
- }
- public static string ReverseArray(string text)
- {
- char[] array = text.ToCharArray();
- Array.Reverse(array);
- return (new string(array));
- }
- public static string StringOfLength(int length)
- {
- Random random = new Random();
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < length; i++)
- {
- sb.Append(Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))));
- }
- return sb.ToString();
- }
- static void Main(string[] args)
- {
- int[] lengths = new int[] { 1, 10, 15, 25, 50, 75, 100, 1000, 100000 };
- foreach (int l in lengths)
- {
- int iterations = 10000;
- string text = StringOfLength(l);
- Benchmark(String.Format("String Builder (Length: {0})", l), ReverseSB, iterations, text);
- Benchmark(String.Format("Array.Reverse (Length: {0})", l), ReverseArray, iterations, text);
- Benchmark(String.Format("Xor (Length: {0})", l), ReverseXor, iterations, text);
- Console.WriteLine();
- }
- Console.Read();
- }
- }
- }
- 2840 Ticks String Builder (Length: 1) : called 10000 times.
- 2900 Ticks Array.Reverse (Length: 1) : called 10000 times.
- 1785 Ticks Xor (Length: 1) : called 10000 times.
- 4439 Ticks String Builder (Length: 10) : called 10000 times.
- 3388 Ticks Array.Reverse (Length: 10) : called 10000 times.
- 2789 Ticks Xor (Length: 10) : called 10000 times.
- 4748 Ticks String Builder (Length: 15) : called 10000 times.
- 2699 Ticks Array.Reverse (Length: 15) : called 10000 times.
- 2887 Ticks Xor (Length: 15) : called 10000 times.
- 7513 Ticks String Builder (Length: 25) : called 10000 times.
- 3009 Ticks Array.Reverse (Length: 25) : called 10000 times.
- 4210 Ticks Xor (Length: 25) : called 10000 times.
- 12868 Ticks String Builder (Length: 50) : called 10000 times.
- 3771 Ticks Array.Reverse (Length: 50) : called 10000 times.
- 7632 Ticks Xor (Length: 50) : called 10000 times.
- 19079 Ticks String Builder (Length: 75) : called 10000 times.
- 4791 Ticks Array.Reverse (Length: 75) : called 10000 times.
- 10619 Ticks Xor (Length: 75) : called 10000 times.
- 24331 Ticks String Builder (Length: 100) : called 10000 times.
- 5496 Ticks Array.Reverse (Length: 100) : called 10000 times.
- 13903 Ticks Xor (Length: 100) : called 10000 times.
- 223442 Ticks String Builder (Length: 1000) : called 10000 times.
- 35773 Ticks Array.Reverse (Length: 1000) : called 10000 times.
- 125728 Ticks Xor (Length: 1000) : called 10000 times.
- 25980361 Ticks String Builder (Length: 100000) : called 10000 times.
- 4596920 Ticks Array.Reverse (Length: 100000) : called 10000 times.
- 13449519 Ticks Xor (Length: 100000) : called 10000 times.