Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added target for .NET 4.5 #136

Merged
merged 5 commits into from
Mar 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading