Skip to content

Instantly share code, notes, and snippets.

@meziantou
Last active December 18, 2017 02:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save meziantou/b120126088457f5f87ad200f4f7bf6b0 to your computer and use it in GitHub Desktop.
Save meziantou/b120126088457f5f87ad200f4f7bf6b0 to your computer and use it in GitHub Desktop.
Benchmark string concat
class Program
{
static void Main(string[] args)
{
BenchmarkRunner.Run<StringBenchmark>();
}
}
[OrderProvider(SummaryOrderPolicy.FastestToSlowest)]
[CoreJob]
[MemoryDiagnoser]
partial class StringBenchmark
{
[Benchmark]
public string StringConcatenation1() => "test" + 0 + "test0";
[Benchmark]
public string StringFormat1() => string.Format("test{0}{1}", 0, "test0");
[Benchmark]
public string StringInterpolation1() => $"test{0}{"test0"}";
[Benchmark]
public string FormattableString1() => Format($"test{0}{"test0"}");
[Benchmark]
public string StringConcatenation5() => "test" + 0 + "test0" + 1 + "test1" + 2 + "test2" + 3 + "test3" + 4 + "test4";
[Benchmark]
public string StringFormat5() => string.Format("test{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", 0, "test0", 1, "test1", 2, "test2", 3, "test3", 4, "test4");
[Benchmark]
public string StringInterpolation5() => $"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}";
[Benchmark]
public string FormattableString5() => Format($"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}");
[Benchmark]
public string StringConcatenation10() => "test" + 0 + "test0" + 1 + "test1" + 2 + "test2" + 3 + "test3" + 4 + "test4" + 5 + "test5" + 6 + "test6" + 7 + "test7" + 8 + "test8" + 9 + "test9";
[Benchmark]
public string StringFormat10() => string.Format("test{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}{17}{18}{19}", 0, "test0", 1, "test1", 2, "test2", 3, "test3", 4, "test4", 5, "test5", 6, "test6", 7, "test7", 8, "test8", 9, "test9");
[Benchmark]
public string StringInterpolation10() => $"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}";
[Benchmark]
public string FormattableString10() => Format($"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}");
[Benchmark]
public string StringConcatenation20() => "test" + 0 + "test0" + 1 + "test1" + 2 + "test2" + 3 + "test3" + 4 + "test4" + 5 + "test5" + 6 + "test6" + 7 + "test7" + 8 + "test8" + 9 + "test9" + 10 + "test10" + 11 + "test11" + 12 + "test12" + 13 + "test13" + 14 + "test14" + 15 + "test15" + 16 + "test16" + 17 + "test17" + 18 + "test18" + 19 + "test19";
[Benchmark]
public string StringFormat20() => string.Format("test{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}{17}{18}{19}{20}{21}{22}{23}{24}{25}{26}{27}{28}{29}{30}{31}{32}{33}{34}{35}{36}{37}{38}{39}", 0, "test0", 1, "test1", 2, "test2", 3, "test3", 4, "test4", 5, "test5", 6, "test6", 7, "test7", 8, "test8", 9, "test9", 10, "test10", 11, "test11", 12, "test12", 13, "test13", 14, "test14", 15, "test15", 16, "test16", 17, "test17", 18, "test18", 19, "test19");
[Benchmark]
public string StringInterpolation20() => $"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}{10}{"test10"}{11}{"test11"}{12}{"test12"}{13}{"test13"}{14}{"test14"}{15}{"test15"}{16}{"test16"}{17}{"test17"}{18}{"test18"}{19}{"test19"}";
[Benchmark]
public string FormattableString20() => Format($"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}{10}{"test10"}{11}{"test11"}{12}{"test12"}{13}{"test13"}{14}{"test14"}{15}{"test15"}{16}{"test16"}{17}{"test17"}{18}{"test18"}{19}{"test19"}");
[Benchmark]
public string StringConcatenation50() => "test" + 0 + "test0" + 1 + "test1" + 2 + "test2" + 3 + "test3" + 4 + "test4" + 5 + "test5" + 6 + "test6" + 7 + "test7" + 8 + "test8" + 9 + "test9" + 10 + "test10" + 11 + "test11" + 12 + "test12" + 13 + "test13" + 14 + "test14" + 15 + "test15" + 16 + "test16" + 17 + "test17" + 18 + "test18" + 19 + "test19" + 20 + "test20" + 21 + "test21" + 22 + "test22" + 23 + "test23" + 24 + "test24" + 25 + "test25" + 26 + "test26" + 27 + "test27" + 28 + "test28" + 29 + "test29" + 30 + "test30" + 31 + "test31" + 32 + "test32" + 33 + "test33" + 34 + "test34" + 35 + "test35" + 36 + "test36" + 37 + "test37" + 38 + "test38" + 39 + "test39" + 40 + "test40" + 41 + "test41" + 42 + "test42" + 43 + "test43" + 44 + "test44" + 45 + "test45" + 46 + "test46" + 47 + "test47" + 48 + "test48" + 49 + "test49";
[Benchmark]
public string StringFormat50() => string.Format("test{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}{17}{18}{19}{20}{21}{22}{23}{24}{25}{26}{27}{28}{29}{30}{31}{32}{33}{34}{35}{36}{37}{38}{39}{40}{41}{42}{43}{44}{45}{46}{47}{48}{49}{50}{51}{52}{53}{54}{55}{56}{57}{58}{59}{60}{61}{62}{63}{64}{65}{66}{67}{68}{69}{70}{71}{72}{73}{74}{75}{76}{77}{78}{79}{80}{81}{82}{83}{84}{85}{86}{87}{88}{89}{90}{91}{92}{93}{94}{95}{96}{97}{98}{99}", 0, "test0", 1, "test1", 2, "test2", 3, "test3", 4, "test4", 5, "test5", 6, "test6", 7, "test7", 8, "test8", 9, "test9", 10, "test10", 11, "test11", 12, "test12", 13, "test13", 14, "test14", 15, "test15", 16, "test16", 17, "test17", 18, "test18", 19, "test19", 20, "test20", 21, "test21", 22, "test22", 23, "test23", 24, "test24", 25, "test25", 26, "test26", 27, "test27", 28, "test28", 29, "test29", 30, "test30", 31, "test31", 32, "test32", 33, "test33", 34, "test34", 35, "test35", 36, "test36", 37, "test37", 38, "test38", 39, "test39", 40, "test40", 41, "test41", 42, "test42", 43, "test43", 44, "test44", 45, "test45", 46, "test46", 47, "test47", 48, "test48", 49, "test49");
[Benchmark]
public string StringInterpolation50() => $"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}{10}{"test10"}{11}{"test11"}{12}{"test12"}{13}{"test13"}{14}{"test14"}{15}{"test15"}{16}{"test16"}{17}{"test17"}{18}{"test18"}{19}{"test19"}{20}{"test20"}{21}{"test21"}{22}{"test22"}{23}{"test23"}{24}{"test24"}{25}{"test25"}{26}{"test26"}{27}{"test27"}{28}{"test28"}{29}{"test29"}{30}{"test30"}{31}{"test31"}{32}{"test32"}{33}{"test33"}{34}{"test34"}{35}{"test35"}{36}{"test36"}{37}{"test37"}{38}{"test38"}{39}{"test39"}{40}{"test40"}{41}{"test41"}{42}{"test42"}{43}{"test43"}{44}{"test44"}{45}{"test45"}{46}{"test46"}{47}{"test47"}{48}{"test48"}{49}{"test49"}";
[Benchmark]
public string FormattableString50() => Format($"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}{10}{"test10"}{11}{"test11"}{12}{"test12"}{13}{"test13"}{14}{"test14"}{15}{"test15"}{16}{"test16"}{17}{"test17"}{18}{"test18"}{19}{"test19"}{20}{"test20"}{21}{"test21"}{22}{"test22"}{23}{"test23"}{24}{"test24"}{25}{"test25"}{26}{"test26"}{27}{"test27"}{28}{"test28"}{29}{"test29"}{30}{"test30"}{31}{"test31"}{32}{"test32"}{33}{"test33"}{34}{"test34"}{35}{"test35"}{36}{"test36"}{37}{"test37"}{38}{"test38"}{39}{"test39"}{40}{"test40"}{41}{"test41"}{42}{"test42"}{43}{"test43"}{44}{"test44"}{45}{"test45"}{46}{"test46"}{47}{"test47"}{48}{"test48"}{49}{"test49"}");
[Benchmark]
public string StringConcatenation100() => "test" + 0 + "test0" + 1 + "test1" + 2 + "test2" + 3 + "test3" + 4 + "test4" + 5 + "test5" + 6 + "test6" + 7 + "test7" + 8 + "test8" + 9 + "test9" + 10 + "test10" + 11 + "test11" + 12 + "test12" + 13 + "test13" + 14 + "test14" + 15 + "test15" + 16 + "test16" + 17 + "test17" + 18 + "test18" + 19 + "test19" + 20 + "test20" + 21 + "test21" + 22 + "test22" + 23 + "test23" + 24 + "test24" + 25 + "test25" + 26 + "test26" + 27 + "test27" + 28 + "test28" + 29 + "test29" + 30 + "test30" + 31 + "test31" + 32 + "test32" + 33 + "test33" + 34 + "test34" + 35 + "test35" + 36 + "test36" + 37 + "test37" + 38 + "test38" + 39 + "test39" + 40 + "test40" + 41 + "test41" + 42 + "test42" + 43 + "test43" + 44 + "test44" + 45 + "test45" + 46 + "test46" + 47 + "test47" + 48 + "test48" + 49 + "test49" + 50 + "test50" + 51 + "test51" + 52 + "test52" + 53 + "test53" + 54 + "test54" + 55 + "test55" + 56 + "test56" + 57 + "test57" + 58 + "test58" + 59 + "test59" + 60 + "test60" + 61 + "test61" + 62 + "test62" + 63 + "test63" + 64 + "test64" + 65 + "test65" + 66 + "test66" + 67 + "test67" + 68 + "test68" + 69 + "test69" + 70 + "test70" + 71 + "test71" + 72 + "test72" + 73 + "test73" + 74 + "test74" + 75 + "test75" + 76 + "test76" + 77 + "test77" + 78 + "test78" + 79 + "test79" + 80 + "test80" + 81 + "test81" + 82 + "test82" + 83 + "test83" + 84 + "test84" + 85 + "test85" + 86 + "test86" + 87 + "test87" + 88 + "test88" + 89 + "test89" + 90 + "test90" + 91 + "test91" + 92 + "test92" + 93 + "test93" + 94 + "test94" + 95 + "test95" + 96 + "test96" + 97 + "test97" + 98 + "test98" + 99 + "test99";
[Benchmark]
public string StringFormat100() => string.Format("test{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}{17}{18}{19}{20}{21}{22}{23}{24}{25}{26}{27}{28}{29}{30}{31}{32}{33}{34}{35}{36}{37}{38}{39}{40}{41}{42}{43}{44}{45}{46}{47}{48}{49}{50}{51}{52}{53}{54}{55}{56}{57}{58}{59}{60}{61}{62}{63}{64}{65}{66}{67}{68}{69}{70}{71}{72}{73}{74}{75}{76}{77}{78}{79}{80}{81}{82}{83}{84}{85}{86}{87}{88}{89}{90}{91}{92}{93}{94}{95}{96}{97}{98}{99}{100}{101}{102}{103}{104}{105}{106}{107}{108}{109}{110}{111}{112}{113}{114}{115}{116}{117}{118}{119}{120}{121}{122}{123}{124}{125}{126}{127}{128}{129}{130}{131}{132}{133}{134}{135}{136}{137}{138}{139}{140}{141}{142}{143}{144}{145}{146}{147}{148}{149}{150}{151}{152}{153}{154}{155}{156}{157}{158}{159}{160}{161}{162}{163}{164}{165}{166}{167}{168}{169}{170}{171}{172}{173}{174}{175}{176}{177}{178}{179}{180}{181}{182}{183}{184}{185}{186}{187}{188}{189}{190}{191}{192}{193}{194}{195}{196}{197}{198}{199}", 0, "test0", 1, "test1", 2, "test2", 3, "test3", 4, "test4", 5, "test5", 6, "test6", 7, "test7", 8, "test8", 9, "test9", 10, "test10", 11, "test11", 12, "test12", 13, "test13", 14, "test14", 15, "test15", 16, "test16", 17, "test17", 18, "test18", 19, "test19", 20, "test20", 21, "test21", 22, "test22", 23, "test23", 24, "test24", 25, "test25", 26, "test26", 27, "test27", 28, "test28", 29, "test29", 30, "test30", 31, "test31", 32, "test32", 33, "test33", 34, "test34", 35, "test35", 36, "test36", 37, "test37", 38, "test38", 39, "test39", 40, "test40", 41, "test41", 42, "test42", 43, "test43", 44, "test44", 45, "test45", 46, "test46", 47, "test47", 48, "test48", 49, "test49", 50, "test50", 51, "test51", 52, "test52", 53, "test53", 54, "test54", 55, "test55", 56, "test56", 57, "test57", 58, "test58", 59, "test59", 60, "test60", 61, "test61", 62, "test62", 63, "test63", 64, "test64", 65, "test65", 66, "test66", 67, "test67", 68, "test68", 69, "test69", 70, "test70", 71, "test71", 72, "test72", 73, "test73", 74, "test74", 75, "test75", 76, "test76", 77, "test77", 78, "test78", 79, "test79", 80, "test80", 81, "test81", 82, "test82", 83, "test83", 84, "test84", 85, "test85", 86, "test86", 87, "test87", 88, "test88", 89, "test89", 90, "test90", 91, "test91", 92, "test92", 93, "test93", 94, "test94", 95, "test95", 96, "test96", 97, "test97", 98, "test98", 99, "test99");
[Benchmark]
public string StringInterpolation100() => $"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}{10}{"test10"}{11}{"test11"}{12}{"test12"}{13}{"test13"}{14}{"test14"}{15}{"test15"}{16}{"test16"}{17}{"test17"}{18}{"test18"}{19}{"test19"}{20}{"test20"}{21}{"test21"}{22}{"test22"}{23}{"test23"}{24}{"test24"}{25}{"test25"}{26}{"test26"}{27}{"test27"}{28}{"test28"}{29}{"test29"}{30}{"test30"}{31}{"test31"}{32}{"test32"}{33}{"test33"}{34}{"test34"}{35}{"test35"}{36}{"test36"}{37}{"test37"}{38}{"test38"}{39}{"test39"}{40}{"test40"}{41}{"test41"}{42}{"test42"}{43}{"test43"}{44}{"test44"}{45}{"test45"}{46}{"test46"}{47}{"test47"}{48}{"test48"}{49}{"test49"}{50}{"test50"}{51}{"test51"}{52}{"test52"}{53}{"test53"}{54}{"test54"}{55}{"test55"}{56}{"test56"}{57}{"test57"}{58}{"test58"}{59}{"test59"}{60}{"test60"}{61}{"test61"}{62}{"test62"}{63}{"test63"}{64}{"test64"}{65}{"test65"}{66}{"test66"}{67}{"test67"}{68}{"test68"}{69}{"test69"}{70}{"test70"}{71}{"test71"}{72}{"test72"}{73}{"test73"}{74}{"test74"}{75}{"test75"}{76}{"test76"}{77}{"test77"}{78}{"test78"}{79}{"test79"}{80}{"test80"}{81}{"test81"}{82}{"test82"}{83}{"test83"}{84}{"test84"}{85}{"test85"}{86}{"test86"}{87}{"test87"}{88}{"test88"}{89}{"test89"}{90}{"test90"}{91}{"test91"}{92}{"test92"}{93}{"test93"}{94}{"test94"}{95}{"test95"}{96}{"test96"}{97}{"test97"}{98}{"test98"}{99}{"test99"}";
[Benchmark]
public string FormattableString100() => Format($"test{0}{"test0"}{1}{"test1"}{2}{"test2"}{3}{"test3"}{4}{"test4"}{5}{"test5"}{6}{"test6"}{7}{"test7"}{8}{"test8"}{9}{"test9"}{10}{"test10"}{11}{"test11"}{12}{"test12"}{13}{"test13"}{14}{"test14"}{15}{"test15"}{16}{"test16"}{17}{"test17"}{18}{"test18"}{19}{"test19"}{20}{"test20"}{21}{"test21"}{22}{"test22"}{23}{"test23"}{24}{"test24"}{25}{"test25"}{26}{"test26"}{27}{"test27"}{28}{"test28"}{29}{"test29"}{30}{"test30"}{31}{"test31"}{32}{"test32"}{33}{"test33"}{34}{"test34"}{35}{"test35"}{36}{"test36"}{37}{"test37"}{38}{"test38"}{39}{"test39"}{40}{"test40"}{41}{"test41"}{42}{"test42"}{43}{"test43"}{44}{"test44"}{45}{"test45"}{46}{"test46"}{47}{"test47"}{48}{"test48"}{49}{"test49"}{50}{"test50"}{51}{"test51"}{52}{"test52"}{53}{"test53"}{54}{"test54"}{55}{"test55"}{56}{"test56"}{57}{"test57"}{58}{"test58"}{59}{"test59"}{60}{"test60"}{61}{"test61"}{62}{"test62"}{63}{"test63"}{64}{"test64"}{65}{"test65"}{66}{"test66"}{67}{"test67"}{68}{"test68"}{69}{"test69"}{70}{"test70"}{71}{"test71"}{72}{"test72"}{73}{"test73"}{74}{"test74"}{75}{"test75"}{76}{"test76"}{77}{"test77"}{78}{"test78"}{79}{"test79"}{80}{"test80"}{81}{"test81"}{82}{"test82"}{83}{"test83"}{84}{"test84"}{85}{"test85"}{86}{"test86"}{87}{"test87"}{88}{"test88"}{89}{"test89"}{90}{"test90"}{91}{"test91"}{92}{"test92"}{93}{"test93"}{94}{"test94"}{95}{"test95"}{96}{"test96"}{97}{"test97"}{98}{"test98"}{99}{"test99"}");
private static string Format(FormattableString fs)
{
return fs.ToString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment