Skip to content

Instantly share code, notes, and snippets.

@EraYaN
Last active February 11, 2019 20:51
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 EraYaN/c25b5988c58f91c1abbf842dddc0b0f2 to your computer and use it in GitHub Desktop.
Save EraYaN/c25b5988c58f91c1abbf842dddc0b0f2 to your computer and use it in GitHub Desktop.
using System;
using System.Security.Cryptography;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
namespace StringTestsCore
{
[CoreJob, MinColumn, MaxColumn, RPlotExporter]
public class LowerTrimSwitchVsTrimEquals
{
[Params("first","third","default","FIRST", "THIRD", " first ", " third ", " default ", " FIRST ", " THIRD ", " first \n", " third \n", " default \n", " FIRST \n", " THIRD \n")]
public string str { get; set; }
[Benchmark(Baseline = true)]
public int LowerTrimSwitch()
{
var str2 = str.Trim().ToLowerInvariant();
switch (str2)
{
case "first":
return 1;
case "second":
return 2;
case "third":
return 3;
default:
return 0;
}
}
[Benchmark]
public int TrimEquals()
{
var str2 = str.Trim();
if (str2.Equals("first",StringComparison.OrdinalIgnoreCase))
return 1;
else if (str2.Equals("second", StringComparison.OrdinalIgnoreCase))
return 2;
else if (str2.Equals("third", StringComparison.OrdinalIgnoreCase))
return 3;
else
return 0;
}
[Benchmark]
public int IndexPropertyDirectlyGte()
{
if (str.IndexOf("first", StringComparison.OrdinalIgnoreCase) >= 0)
return 1;
else if (str.IndexOf("second", StringComparison.OrdinalIgnoreCase) >= 0)
return 2;
else if (str.IndexOf("third", StringComparison.OrdinalIgnoreCase) >= 0)
return 3;
else
return 0;
}
[Benchmark]
public int IndexPropertyDirectlyGt()
{
if (str.IndexOf("first", StringComparison.OrdinalIgnoreCase) > -1)
return 1;
else if (str.IndexOf("second", StringComparison.OrdinalIgnoreCase) > -1)
return 2;
else if (str.IndexOf("third", StringComparison.OrdinalIgnoreCase) > -1)
return 3;
else
return 0;
}
[Benchmark]
public int IndexPropertyDirectlyNeq()
{
if (str.IndexOf("first", StringComparison.OrdinalIgnoreCase) != -1)
return 1;
else if (str.IndexOf("second", StringComparison.OrdinalIgnoreCase) != -1)
return 2;
else if (str.IndexOf("third", StringComparison.OrdinalIgnoreCase) != -1)
return 3;
else
return 0;
}
}
public class Program
{
public static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<LowerTrimSwitchVsTrimEquals>();
}
}
}
BenchmarkDotNet=v0.11.3, OS=Windows 10.0.17134.523 (1803/April2018Update/Redstone4)
AMD Ryzen 7 1700X, 1 CPU, 16 logical and 8 physical cores
.NET Core SDK=2.2.200-preview-009648
  [Host] : .NET Core ? (CoreCLR 4.6.27207.03, CoreFX 4.6.27207.03), 64bit RyuJIT
  Core   : .NET Core 2.1.7 (CoreCLR 4.6.27129.04, CoreFX 4.6.27129.04), 64bit RyuJIT

Job=Core  Runtime=Core  
Method str Mean Error StdDev Min Max Ratio RatioSD
LowerTrimSwitch ** (...)
[26]** 77.11 ns 0.2697 ns 0.2391 ns 76.89 ns 77.62 ns 1.00 0.00
TrimEquals (...)
[26] 68.82 ns 0.3867 ns 0.3617 ns 68.18 ns 69.39 ns 0.89 0.01
IndexPropertyDirectlyGte (...)
[26] 53.91 ns 0.2505 ns 0.2343 ns 53.41 ns 54.34 ns 0.70 0.00
IndexPropertyDirectlyGt (...)
[26] 53.86 ns 0.2021 ns 0.1890 ns 53.56 ns 54.15 ns 0.70 0.00
IndexPropertyDirectlyNeq (...)
[26] 53.85 ns 0.3243 ns 0.3033 ns 53.46 ns 54.42 ns 0.70 0.00
LowerTrimSwitch (...)
[26] 84.55 ns 0.1756 ns 0.1467 ns 84.23 ns 84.70 ns 1.00 0.00
TrimEquals (...)
[26] 98.49 ns 0.3723 ns 0.3482 ns 97.95 ns 99.14 ns 1.16 0.00
IndexPropertyDirectlyGte (...)
[26] 219.65 ns 0.9091 ns 0.8504 ns 218.32 ns 221.35 ns 2.60 0.01
IndexPropertyDirectlyGt (...)
[26] 219.69 ns 1.0140 ns 0.9485 ns 218.04 ns 221.69 ns 2.60 0.01
IndexPropertyDirectlyNeq (...)
[26] 219.70 ns 0.7732 ns 0.7233 ns 218.79 ns 221.52 ns 2.60 0.01
LowerTrimSwitch ** (...)
[28]** 68.93 ns 0.5038 ns 0.4713 ns 68.26 ns 69.79 ns 1.00 0.00
TrimEquals (...)
[28] 66.51 ns 0.3154 ns 0.2950 ns 66.02 ns 67.00 ns 0.97 0.01
IndexPropertyDirectlyGte (...)
[28] 267.88 ns 1.4330 ns 1.3404 ns 266.14 ns 270.89 ns 3.89 0.03
IndexPropertyDirectlyGt (...)
[28] 267.92 ns 1.4280 ns 1.1924 ns 265.51 ns 269.39 ns 3.89 0.03
IndexPropertyDirectlyNeq (...)
[28] 268.46 ns 0.8635 ns 0.7654 ns 266.87 ns 269.84 ns 3.90 0.03
LowerTrimSwitch ** (...)
[26]** 73.75 ns 0.3459 ns 0.3236 ns 73.07 ns 74.21 ns 1.00 0.00
TrimEquals (...)
[26] 99.26 ns 0.4967 ns 0.4646 ns 98.57 ns 100.15 ns 1.35 0.01
IndexPropertyDirectlyGte (...)
[26] 219.45 ns 0.6847 ns 0.6405 ns 218.41 ns 220.44 ns 2.98 0.01
IndexPropertyDirectlyGt (...)
[26] 219.51 ns 0.8189 ns 0.7660 ns 218.46 ns 221.05 ns 2.98 0.02
IndexPropertyDirectlyNeq (...)
[26] 219.58 ns 1.1543 ns 1.0797 ns 218.32 ns 221.68 ns 2.98 0.02
LowerTrimSwitch ** (...)
[25]** 66.28 ns 0.3865 ns 0.3426 ns 65.78 ns 67.09 ns 1.00 0.00
TrimEquals (...)
[25] 67.88 ns 0.3148 ns 0.2945 ns 67.44 ns 68.30 ns 1.02 0.01
IndexPropertyDirectlyGte (...)
[25] 51.99 ns 0.3859 ns 0.3421 ns 51.42 ns 52.65 ns 0.78 0.01
IndexPropertyDirectlyGt (...)
[25] 51.39 ns 0.2356 ns 0.2088 ns 51.08 ns 51.66 ns 0.78 0.01
IndexPropertyDirectlyNeq (...)
[25] 51.57 ns 0.2750 ns 0.2572 ns 51.12 ns 52.11 ns 0.78 0.01
LowerTrimSwitch ** FIRST ** 54.77 ns 0.2920 ns 0.2589 ns 54.35 ns 55.31 ns 1.00 0.00
TrimEquals FIRST 44.72 ns 0.3405 ns 0.3185 ns 44.29 ns 45.34 ns 0.82 0.01
IndexPropertyDirectlyGte FIRST 32.80 ns 0.1701 ns 0.1421 ns 32.55 ns 33.05 ns 0.60 0.00
IndexPropertyDirectlyGt FIRST 32.70 ns 0.0973 ns 0.0863 ns 32.55 ns 32.82 ns 0.60 0.00
IndexPropertyDirectlyNeq FIRST 32.74 ns 0.1069 ns 0.0948 ns 32.61 ns 32.97 ns 0.60 0.00
LowerTrimSwitch ** THIRD ** 62.01 ns 0.3803 ns 0.3558 ns 61.27 ns 62.64 ns 1.00 0.00
TrimEquals THIRD 69.11 ns 0.1868 ns 0.1747 ns 68.88 ns 69.43 ns 1.11 0.01
IndexPropertyDirectlyGte THIRD 88.41 ns 0.2967 ns 0.2630 ns 87.82 ns 88.86 ns 1.43 0.01
IndexPropertyDirectlyGt THIRD 88.44 ns 0.4706 ns 0.4402 ns 87.76 ns 89.29 ns 1.43 0.01
IndexPropertyDirectlyNeq THIRD 88.54 ns 0.2695 ns 0.2389 ns 88.09 ns 88.92 ns 1.43 0.01
LowerTrimSwitch ** default ** 44.66 ns 0.2181 ns 0.2040 ns 44.38 ns 45.05 ns 1.00 0.00
TrimEquals default 44.60 ns 0.2169 ns 0.2029 ns 44.21 ns 44.93 ns 1.00 0.01
IndexPropertyDirectlyGte default 96.83 ns 0.6400 ns 0.5986 ns 95.51 ns 97.97 ns 2.17 0.02
IndexPropertyDirectlyGt default 96.63 ns 0.4287 ns 0.4010 ns 96.03 ns 97.22 ns 2.16 0.01
IndexPropertyDirectlyNeq default 96.65 ns 0.6098 ns 0.5705 ns 95.63 ns 97.52 ns 2.16 0.02
LowerTrimSwitch ** first ** 43.48 ns 0.2256 ns 0.2110 ns 43.09 ns 43.83 ns 1.00 0.00
TrimEquals first 43.38 ns 0.3062 ns 0.2865 ns 42.85 ns 43.96 ns 1.00 0.01
IndexPropertyDirectlyGte first 32.86 ns 0.1898 ns 0.1775 ns 32.61 ns 33.23 ns 0.76 0.01
IndexPropertyDirectlyGt first 32.65 ns 0.0985 ns 0.0922 ns 32.48 ns 32.81 ns 0.75 0.00
IndexPropertyDirectlyNeq first 32.72 ns 0.1816 ns 0.1699 ns 32.43 ns 33.07 ns 0.75 0.01
LowerTrimSwitch ** third ** 50.20 ns 0.4543 ns 0.4249 ns 49.33 ns 50.64 ns 1.00 0.00
TrimEquals third 70.02 ns 0.4631 ns 0.4332 ns 69.45 ns 71.08 ns 1.39 0.02
IndexPropertyDirectlyGte third 88.89 ns 0.3116 ns 0.2915 ns 88.38 ns 89.34 ns 1.77 0.01
IndexPropertyDirectlyGt third 89.82 ns 1.2134 ns 1.0757 ns 88.62 ns 92.23 ns 1.79 0.03
IndexPropertyDirectlyNeq third 89.10 ns 0.4787 ns 0.4478 ns 88.33 ns 89.79 ns 1.77 0.02
LowerTrimSwitch FIRST 41.28 ns 0.3438 ns 0.3216 ns 40.83 ns 41.80 ns 1.00 0.00
TrimEquals FIRST 25.89 ns 0.2011 ns 0.1882 ns 25.64 ns 26.20 ns 0.63 0.01
IndexPropertyDirectlyGte FIRST 30.52 ns 0.1330 ns 0.1179 ns 30.32 ns 30.74 ns 0.74 0.01
IndexPropertyDirectlyGt FIRST 30.47 ns 0.2444 ns 0.2286 ns 30.19 ns 30.95 ns 0.74 0.01
IndexPropertyDirectlyNeq FIRST 30.48 ns 0.1419 ns 0.1327 ns 30.20 ns 30.72 ns 0.74 0.01
LowerTrimSwitch THIRD 48.24 ns 0.6442 ns 0.6026 ns 47.48 ns 49.52 ns 1.00 0.00
TrimEquals THIRD 51.53 ns 0.1268 ns 0.1059 ns 51.33 ns 51.66 ns 1.07 0.01
IndexPropertyDirectlyGte THIRD 79.13 ns 0.5426 ns 0.5075 ns 78.34 ns 80.23 ns 1.64 0.02
IndexPropertyDirectlyGt THIRD 79.33 ns 0.6976 ns 0.6525 ns 78.82 ns 80.55 ns 1.64 0.02
IndexPropertyDirectlyNeq THIRD 78.99 ns 0.5984 ns 0.5598 ns 78.25 ns 80.02 ns 1.64 0.02
LowerTrimSwitch default 32.89 ns 0.1552 ns 0.1452 ns 32.71 ns 33.25 ns 1.00 0.00
TrimEquals default 35.39 ns 0.1727 ns 0.1615 ns 35.15 ns 35.69 ns 1.08 0.01
IndexPropertyDirectlyGte default 88.53 ns 0.4421 ns 0.4135 ns 87.70 ns 89.39 ns 2.69 0.02
IndexPropertyDirectlyGt default 87.95 ns 0.1866 ns 0.1558 ns 87.54 ns 88.11 ns 2.67 0.01
IndexPropertyDirectlyNeq default 88.01 ns 0.3978 ns 0.3526 ns 87.56 ns 88.87 ns 2.68 0.01
LowerTrimSwitch first 27.68 ns 0.0585 ns 0.0488 ns 27.58 ns 27.74 ns 1.00 0.00
TrimEquals first 15.19 ns 0.0832 ns 0.0738 ns 15.05 ns 15.35 ns 0.55 0.00
IndexPropertyDirectlyGte first 30.63 ns 0.3207 ns 0.3000 ns 30.29 ns 31.23 ns 1.11 0.01
IndexPropertyDirectlyGt first 30.59 ns 0.1283 ns 0.1138 ns 30.34 ns 30.75 ns 1.10 0.00
IndexPropertyDirectlyNeq first 30.47 ns 0.1996 ns 0.1867 ns 30.12 ns 30.72 ns 1.10 0.01
LowerTrimSwitch third 34.95 ns 0.1538 ns 0.1439 ns 34.73 ns 35.24 ns 1.00 0.00
TrimEquals third 42.40 ns 0.1791 ns 0.1675 ns 42.06 ns 42.71 ns 1.21 0.01
IndexPropertyDirectlyGte third 79.23 ns 0.3630 ns 0.3396 ns 78.53 ns 79.83 ns 2.27 0.01
IndexPropertyDirectlyGt third 79.22 ns 0.3779 ns 0.3350 ns 78.57 ns 79.99 ns 2.27 0.01
IndexPropertyDirectlyNeq third 79.38 ns 0.4484 ns 0.4194 ns 78.74 ns 80.10 ns 2.27 0.01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment