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