Skip to content

Instantly share code, notes, and snippets.

@joncloud
Created January 21, 2021 03:16
Show Gist options
  • Save joncloud/0f4934def0c1c292eccdb877d66c44ab to your computer and use it in GitHub Desktop.
Save joncloud/0f4934def0c1c292eccdb877d66c44ab to your computer and use it in GitHub Desktop.
using System;
using System.Runtime.CompilerServices;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
class Program
{
static void Main(string[] args)
{
BenchmarkRunner.Run<Tests>();
}
}
[MemoryDiagnoser]
public class Tests {
[Benchmark]
public int Span() {
Span<bool> span = stackalloc bool[256];
for (var i = 0; i < span.Length; i++) {
if (i % 2 == 0) {
span[i] = true;
}
}
int count = 0;
for (var i = 0; i < span.Length; i++) {
if (span[i]) count++;
}
return count;
}
[Benchmark]
[SkipLocalsInit]
public int Span_ElseInit() {
Span<bool> span = stackalloc bool[256];
for (var i = 0; i < span.Length; i++) {
if (i % 2 == 0) {
span[i] = true;
}
else {
span[i] = false;
}
}
int count = 0;
for (var i = 0; i < span.Length; i++) {
if (span[i]) count++;
}
return count;
}
[Benchmark]
[SkipLocalsInit]
public int Span_ClearInit() {
Span<bool> span = stackalloc bool[256];
span.Clear();
for (var i = 0; i < span.Length; i++) {
if (i % 2 == 0) {
span[i] = true;
}
}
int count = 0;
for (var i = 0; i < span.Length; i++) {
if (span[i]) count++;
}
return count;
}
}
BenchmarkDotNet=v0.12.1, OS=ubuntu 20.04
Intel Core i5-2400 CPU 3.10GHz (Sandy Bridge), 1 CPU, 4 logical and 4 physical cores
.NET Core SDK=5.0.101
  [Host]     : .NET Core 5.0.1 (CoreCLR 5.0.120.57516, CoreFX 5.0.120.57516), X64 RyuJIT
  DefaultJob : .NET Core 5.0.1 (CoreCLR 5.0.120.57516, CoreFX 5.0.120.57516), X64 RyuJIT

Method Mean Error StdDev Gen 0 Gen 1 Gen 2 Allocated
Span 410.0 ns 2.87 ns 2.69 ns - - - -
Span_ElseInit 407.9 ns 2.39 ns 2.23 ns - - - -
Span_ClearInit 429.9 ns 2.80 ns 2.34 ns - - - -
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment