Skip to content

Commit

Permalink
Added target for .NET 4.5 (#136)
Browse files Browse the repository at this point in the history
* Added target for .NET 4.5

* PR Feedback and Build-Fix

* Benchmarks for .NET 4.6.1

* CI for benchmarks_net_full

* Benchmark results + ReadMe.md update

[skip ci]
  • Loading branch information
gfoidl committed Mar 23, 2020
1 parent d835b32 commit e4f662d
Show file tree
Hide file tree
Showing 67 changed files with 343 additions and 36 deletions.
6 changes: 6 additions & 0 deletions .azure/pipelines/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,9 @@ jobs:
name: benchmarks_mac
vmImage: 'macOS-10.15'
dependsOn: mac

- template: jobs/benchmarks_net_full.yml
parameters:
name: benchmarks_net_full
vmImage: 'windows-2019'
dependsOn: windows
23 changes: 23 additions & 0 deletions .azure/pipelines/jobs/benchmarks_net_full.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
parameters:
name: ''
vmImage: ''
dependsOn: ''

jobs:
- job: ${{ parameters.name }}
dependsOn:
- ${{ parameters.dependsOn }}
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'), eq(variables['Build.Reason'], 'Schedule'))
pool:
vmImage: ${{ parameters.vmImage }}
timeoutInMinutes: 0 # 360 minutes
steps:
- bash: |
chmod u+x *.sh
export BENCH_FX=net461
./run-benchmarks.sh
- task: PublishBuildArtifacts@1
inputs:
pathtoPublish: 'perf/gfoidl.Base64.Benchmarks/bin/Release/net461/BenchmarkDotNet.Artifacts/results'
artifactName: '${{ parameters.name }}'
1 change: 1 addition & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<PropertyGroup>
<LangVersion>latest</LangVersion>
<StandardTfms>netcoreapp3.0;netstandard2.1;netstandard2.0</StandardTfms>
<StandardTfms Condition="'$(OS)' == 'Windows_NT'">$(StandardTfms);net45</StandardTfms>
</PropertyGroup>

<PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ In .NET Core 3.0 onwards encoding / decoding is done with SIMD-support:
| Framework | scalar | SSSE3 | AVX2 |
| -- | -- | -- | -- |
| .NET Core 3.0 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| .NET Standard 2.0 | :heavy_check_mark: | :x: | :x: |
| .NET Standard 2.0 / .NET 4.5 | :heavy_check_mark: | :x: | :x: |

If available AVX will "eat" up as much as possible, then SSE will "eat" up as much as possible,
finally scalar code processes the rest (including padding).
Expand Down
2 changes: 1 addition & 1 deletion demo/gfoidl.Base64.Demo/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

namespace gfoidl.Base64.Demo
{
class Program
public static class Program
{
static async Task Main()
{
Expand Down
2 changes: 1 addition & 1 deletion fuzz/gfoidl.Base64.FuzzTests/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

namespace gfoidl.Base64.FuzzTests
{
class Program
public static class Program
{
static void Main(string[] args)
{
Expand Down
1 change: 1 addition & 0 deletions gfoidl.Base64.sln
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "jobs", "jobs", "{BBE8166F-3522-4A1F-87F7-1D88280529C5}"
ProjectSection(SolutionItems) = preProject
.azure\pipelines\jobs\benchmarks.yml = .azure\pipelines\jobs\benchmarks.yml
.azure\pipelines\jobs\benchmarks_net_full.yml = .azure\pipelines\jobs\benchmarks_net_full.yml
.azure\pipelines\jobs\build_and_test.yml = .azure\pipelines\jobs\build_and_test.yml
.azure\pipelines\jobs\build_and_test_intrinsics.yml = .azure\pipelines\jobs\build_and_test_intrinsics.yml
.azure\pipelines\jobs\demo.yml = .azure\pipelines\jobs\demo.yml
Expand Down
12 changes: 7 additions & 5 deletions perf/gfoidl.Base64.Benchmarks/BaseBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ public class Base64UrlEncoderBenchmark : BaseBenchmark
public Base64UrlEncoderBenchmark() : base(Base64.Url) { }
}
//-------------------------------------------------------------------------
#if NETCOREAPP
[Config(typeof(HardwareIntrinsicsCustomConfig))]
#endif
[MemoryDiagnoser]
public abstract class BaseBenchmark
{
Expand All @@ -38,22 +40,22 @@ protected BaseBenchmark(IBase64? encoder)
}
//---------------------------------------------------------------------
[Benchmark]
public string Encode_Data() => _encoder.Encode(_data);
public string Encode_Data() => _encoder.Encode(_data.AsSpan()); // AsSpan for .NET Full
//---------------------------------------------------------------------
[Benchmark]
public string Encode_Guid() => _encoder.Encode(_guid);
public string Encode_Guid() => _encoder.Encode(_guid.AsSpan()); // AsSpan for .NET Full
//---------------------------------------------------------------------
[Benchmark]
public byte[] Decode_Data() => _encoder.Decode(_dataEncoded);
public byte[] Decode_Data() => _encoder.Decode(_dataEncoded.AsSpan()); // AsSpan for .NET Full
//---------------------------------------------------------------------
[Benchmark]
public byte[] Decode_Guid() => _encoder.Decode(_guidEncoded);
public byte[] Decode_Guid() => _encoder.Decode(_guidEncoded.AsSpan()); // AsSpan for .NET Full
//---------------------------------------------------------------------
[Benchmark]
public int GetArraySizeRequiredToEncode() => _encoder.GetEncodedLength(ByteArraySize);
//---------------------------------------------------------------------
[Benchmark]
public int GetArraySizeRequiredToDecode() => _encoder.GetDecodedLength(_dataEncoded);
public int GetArraySizeRequiredToDecode() => _encoder.GetDecodedLength(_dataEncoded.AsSpan()); // AsSpan for .NET Full
//---------------------------------------------------------------------
[Benchmark]
public int GetMaxDecodedLength() => _encoder.GetMaxDecodedLength(_dataEncoded.Length);
Expand Down
2 changes: 2 additions & 0 deletions perf/gfoidl.Base64.Benchmarks/DecodeStringBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

namespace gfoidl.Base64.Benchmarks
{
#if NETCOREAPP
[Config(typeof(HardwareIntrinsicsCustomConfig))]
#endif
[MemoryDiagnoser]
public class DecodeStringBenchmark
{
Expand Down
2 changes: 2 additions & 0 deletions perf/gfoidl.Base64.Benchmarks/DecodeStringUrlBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

namespace gfoidl.Base64.Benchmarks
{
#if NETCOREAPP
[Config(typeof(HardwareIntrinsicsCustomConfig))]
#endif
[MemoryDiagnoser]
public class DecodeStringUrlBenchmark
{
Expand Down
2 changes: 2 additions & 0 deletions perf/gfoidl.Base64.Benchmarks/DecodeUtf8Benchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

namespace gfoidl.Base64.Benchmarks
{
#if NETCOREAPP
[Config(typeof(HardwareIntrinsicsCustomConfig))]
#endif
[MemoryDiagnoser]
public class DecodeUtf8Benchmark
{
Expand Down
2 changes: 2 additions & 0 deletions perf/gfoidl.Base64.Benchmarks/EncodeStringBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

namespace gfoidl.Base64.Benchmarks
{
#if NETCOREAPP
[Config(typeof(HardwareIntrinsicsCustomConfig))]
#endif
[MemoryDiagnoser]
public class EncodeStringBenchmark
{
Expand Down
2 changes: 2 additions & 0 deletions perf/gfoidl.Base64.Benchmarks/EncodeStringUrlBenchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

namespace gfoidl.Base64.Benchmarks
{
#if NETCOREAPP
[Config(typeof(HardwareIntrinsicsCustomConfig))]
#endif
[MemoryDiagnoser]
public class EncodeStringUrlBenchmark
{
Expand Down
2 changes: 2 additions & 0 deletions perf/gfoidl.Base64.Benchmarks/EncodeUtf8Benchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

namespace gfoidl.Base64.Benchmarks
{
#if NETCOREAPP
[Config(typeof(HardwareIntrinsicsCustomConfig))]
#endif
[MemoryDiagnoser]
public class EncodeUtf8Benchmark
{
Expand Down
14 changes: 13 additions & 1 deletion perf/gfoidl.Base64.Benchmarks/gfoidl.Base64.Benchmarks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,27 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<TargetFrameworks Condition="'$(OS)' != 'Windows_NT'">netcoreapp3.0</TargetFrameworks>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">netcoreapp3.0;net461</TargetFrameworks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Nullable>enable</Nullable>
</PropertyGroup>

<PropertyGroup Condition="'$(TargetFramework)' == 'net461'">
<!-- Ignore possible null-reference, as the analysis won't kick in properly -->
<NoWarn>$(NoWarn);CS8602</NoWarn>
</PropertyGroup>

<ItemGroup>
<Compile Include="..\..\source\SimdInfo.cs" Link="SimdInfo.cs" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net461'">
<Compile Remove="StringBenchmarks\Base64EncodeToString.cs" />
<Compile Remove="Vector*HelperBenchmarks\*.cs" />
<Compile Remove="ReadOnlySequenceBenchmark.cs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.12.0" />
<PackageReference Include="Fody" Version="6.0.4">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Method;Job;AnalyzeLaunchVariance;EvaluateOverhead;MaxAbsoluteError;MaxRelativeError;MinInvokeCount;MinIterationTime;OutlierMode;Affinity;EnvironmentVariables;Jit;Platform;PowerPlanMode;Runtime;AllowVeryLargeObjects;Concurrent;CpuGroups;Force;HeapAffinitizeMask;HeapCount;NoAffinitize;RetainVm;Server;Arguments;BuildConfiguration;Clock;EngineFactory;NuGetReferences;Toolchain;IsMutator;InvocationCount;IterationCount;IterationTime;LaunchCount;MaxIterationCount;MaxWarmupIterationCount;MinIterationCount;MinWarmupIterationCount;RunStrategy;UnrollFactor;WarmupCount;Mean;Error;StdDev;Gen 0;Gen 1;Gen 2;Allocated
Encode_Data;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;918.029 ns;7.2174 ns;6.0269 ns;1.0958;0.0000;0.0000;3451 B
Encode_Guid;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;95.461 ns;0.4049 ns;0.3589 ns;0.0254;0.0000;0.0000;80 B
Decode_Data;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;650.626 ns;8.7997 ns;8.2313 ns;0.1678;0.0000;0.0000;530 B
Decode_Guid;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;82.348 ns;0.9401 ns;0.8794 ns;0.0126;0.0000;0.0000;40 B
GetArraySizeRequiredToEncode;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;2.252 ns;0.0556 ns;0.0520 ns;0.0000;0.0000;0.0000;0 B
GetArraySizeRequiredToDecode;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;25.775 ns;0.1683 ns;0.1574 ns;0.0000;0.0000;0.0000;0 B
GetMaxDecodedLength;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;2.243 ns;0.0586 ns;0.0520 ns;0.0000;0.0000;0.0000;0 B
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
``` ini

BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18362
Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
[Host] : .NET Framework 4.8 (4.8.4121.0), X64 RyuJIT
DefaultJob : .NET Framework 4.8 (4.8.4121.0), X64 RyuJIT


```
| Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|----------------------------- |-----------:|----------:|----------:|-------:|------:|------:|----------:|
| Encode_Data | 918.029 ns | 7.2174 ns | 6.0269 ns | 1.0958 | - | - | 3451 B |
| Encode_Guid | 95.461 ns | 0.4049 ns | 0.3589 ns | 0.0254 | - | - | 80 B |
| Decode_Data | 650.626 ns | 8.7997 ns | 8.2313 ns | 0.1678 | - | - | 530 B |
| Decode_Guid | 82.348 ns | 0.9401 ns | 0.8794 ns | 0.0126 | - | - | 40 B |
| GetArraySizeRequiredToEncode | 2.252 ns | 0.0556 ns | 0.0520 ns | - | - | - | - |
| GetArraySizeRequiredToDecode | 25.775 ns | 0.1683 ns | 0.1574 ns | - | - | - | - |
| GetMaxDecodedLength | 2.243 ns | 0.0586 ns | 0.0520 ns | - | - | - | - |
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Method;Job;AnalyzeLaunchVariance;EvaluateOverhead;MaxAbsoluteError;MaxRelativeError;MinInvokeCount;MinIterationTime;OutlierMode;Affinity;EnvironmentVariables;Jit;Platform;PowerPlanMode;Runtime;AllowVeryLargeObjects;Concurrent;CpuGroups;Force;HeapAffinitizeMask;HeapCount;NoAffinitize;RetainVm;Server;Arguments;BuildConfiguration;Clock;EngineFactory;NuGetReferences;Toolchain;IsMutator;InvocationCount;IterationCount;IterationTime;LaunchCount;MaxIterationCount;MaxWarmupIterationCount;MinIterationCount;MinWarmupIterationCount;RunStrategy;UnrollFactor;WarmupCount;Mean;Error;StdDev;Gen 0;Gen 1;Gen 2;Allocated
Encode_Data;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;930.680 ns;14.1025 ns;11.7762 ns;1.0939;0.0000;0.0000;3443 B
Encode_Guid;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;96.448 ns;0.4192 ns;0.3921 ns;0.0229;0.0000;0.0000;72 B
Decode_Data;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;662.351 ns;10.0879 ns;8.4239 ns;0.1678;0.0000;0.0000;530 B
Decode_Guid;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;65.796 ns;0.6604 ns;0.5854 ns;0.0126;0.0000;0.0000;40 B
GetArraySizeRequiredToEncode;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;3.471 ns;0.0464 ns;0.0411 ns;0.0000;0.0000;0.0000;0 B
GetArraySizeRequiredToDecode;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;13.537 ns;0.1367 ns;0.1212 ns;0.0000;0.0000;0.0000;0 B
GetMaxDecodedLength;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;3.027 ns;0.0626 ns;0.0585 ns;0.0000;0.0000;0.0000;0 B
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
``` ini

BenchmarkDotNet=v0.12.0, OS=Windows 10.0.18362
Intel Core i7-7700HQ CPU 2.80GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
[Host] : .NET Framework 4.8 (4.8.4121.0), X64 RyuJIT
DefaultJob : .NET Framework 4.8 (4.8.4121.0), X64 RyuJIT


```
| Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
|----------------------------- |-----------:|-----------:|-----------:|-------:|------:|------:|----------:|
| Encode_Data | 930.680 ns | 14.1025 ns | 11.7762 ns | 1.0939 | - | - | 3443 B |
| Encode_Guid | 96.448 ns | 0.4192 ns | 0.3921 ns | 0.0229 | - | - | 72 B |
| Decode_Data | 662.351 ns | 10.0879 ns | 8.4239 ns | 0.1678 | - | - | 530 B |
| Decode_Guid | 65.796 ns | 0.6604 ns | 0.5854 ns | 0.0126 | - | - | 40 B |
| GetArraySizeRequiredToEncode | 3.471 ns | 0.0464 ns | 0.0411 ns | - | - | - | - |
| GetArraySizeRequiredToDecode | 13.537 ns | 0.1367 ns | 0.1212 ns | - | - | - | - |
| GetMaxDecodedLength | 3.027 ns | 0.0626 ns | 0.0585 ns | - | - | - | - |
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Method;Job;AnalyzeLaunchVariance;EvaluateOverhead;MaxAbsoluteError;MaxRelativeError;MinInvokeCount;MinIterationTime;OutlierMode;Affinity;EnvironmentVariables;Jit;Platform;PowerPlanMode;Runtime;AllowVeryLargeObjects;Concurrent;CpuGroups;Force;HeapAffinitizeMask;HeapCount;NoAffinitize;RetainVm;Server;Arguments;BuildConfiguration;Clock;EngineFactory;NuGetReferences;Toolchain;IsMutator;InvocationCount;IterationCount;IterationTime;LaunchCount;MaxIterationCount;MaxWarmupIterationCount;MinIterationCount;MinWarmupIterationCount;RunStrategy;UnrollFactor;WarmupCount;DataLen;Mean;Error;StdDev;Ratio;Gen 0;Gen 1;Gen 2;Allocated
ConvertFromBase64CharArray;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;5;34.21 ns;0.239 ns;0.224 ns;1.00;0.0102;0.0000;0.0000;32 B
gfoidlBase64;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;5;64.96 ns;0.521 ns;0.407 ns;1.90;0.0101;0.0000;0.0000;32 B
ConvertFromBase64CharArray;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;16;75.28 ns;0.295 ns;0.261 ns;1.00;0.0126;0.0000;0.0000;40 B
gfoidlBase64;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;16;79.27 ns;0.811 ns;0.719 ns;1.05;0.0126;0.0000;0.0000;40 B
ConvertFromBase64CharArray;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;1000;"3,270.70 ns";16.197 ns;15.150 ns;1.00;0.3242;0.0000;0.0000;1027 B
gfoidlBase64;Default;False;Default;Default;Default;Default;Default;Default;11111111;Empty;RyuJit;X64;8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c;.NET 4.8;False;True;False;True;Default;Default;False;False;False;Default;Default;Default;Default;Default;Default;Default;1;Default;Default;Default;Default;Default;Default;Default;Default;16;Default;1000;"1,192.49 ns";12.818 ns;11.990 ns;0.36;0.3262;0.0000;0.0000;1027 B

0 comments on commit e4f662d

Please sign in to comment.