Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- static class Program
- {
- static string[] rnds = new string[10000];
- static Program()
- {
- Stopwatch.GetTimestamp();
- Stopwatch.GetTimestamp();
- Stopwatch.GetTimestamp();
- Stopwatch.GetTimestamp();
- rnd = new Random((int)(Stopwatch.GetTimestamp() >> 5));
- for (int i = 0; i < rnds.Length; i++)
- rnds[i] = new string((Char)('!' + rnd.Next('~' - '!')), rnd.Next(7) + 1);
- // JIT warm-up
- var rgs = GetStrings();
- orderingA(rgs);
- orderingB(rgs);
- // reset timing
- t1 = t2 = 0;
- }
- readonly static Random rnd;
- static long t1, t2;
- static void Main(string[] args)
- {
- int i = 10000000;
- do
- {
- if ((i & 1) == 0)
- orderingA(GetStrings());
- else
- orderingB(GetStrings());
- }
- while (--i > 0);
- Console.WriteLine("'StringJoin' {0:#,###}", t1);
- Console.WriteLine("String.Join {0:#,###}", t2);
- Console.WriteLine("{0:N2}", (t2 - t1) * 100.0 / Math.Min(t1, t2));
- }
- static string[] GetStrings()
- {
- var rgs = new String[rnd.Next(100) + 2];
- for (int i = 0; i < rgs.Length; i++)
- rgs[i] = rnds[rnd.Next(rnds.Length)];
- return rgs;
- }
- static void orderingA(String[] rgs)
- {
- test1(rgs);
- test2(rgs);
- }
- static void orderingB(String[] rgs)
- {
- test2(rgs);
- test1(rgs);
- }
- static void test1(String[] rgs)
- {
- var t = Stopwatch.GetTimestamp();
- alib.Enumerable.enum_ext.StringJoin(rgs);
- t1 += Stopwatch.GetTimestamp() - t;
- }
- static void test2(String[] rgs)
- {
- var t = Stopwatch.GetTimestamp();
- String.Join(String.Empty, rgs);
- t2 += Stopwatch.GetTimestamp() - t;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement