Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
namespace SpanTDemo
{
class Program
{
static void Main(string[] args)
{
//BenchmarkRunner.Run<BenchmarkDemo1>();
BenchmarkRunner.Run<BenchmarkDemo2>();
}
}
[MemoryDiagnoser]
public class BenchmarkDemo1
{
private int[] _myArray;
[Params(100, 1000, 10000)]
public int Size { get; set; }
[GlobalSetup]
public void SetUp()
{
_myArray = new int[Size];
for (int index = 0; index < Size; index++)
{
_myArray[index] = index;
}
}
[Benchmark(Baseline = true)]
public int[] Original()
{
return _myArray.Skip(Size / 2).Take(Size / 4).ToArray();
}
[Benchmark]
public int[] ArrayCopy()
{
var copy = new int[Size / 4];
Array.Copy(_myArray, Size / 2, copy, 0, Size / 4);
return copy;
}
[Benchmark]
public Span<int> Span()
{
return _myArray.AsSpan().Slice(Size / 2, Size / 4);
}
}
[MemoryDiagnoser]
public class BenchmarkDemo2
{
private static readonly string _dateString = "01 05 1991";
[Benchmark(Baseline = true)]
public DateTime Original()
{
var day = _dateString.Substring(0, 2);
var month = _dateString.Substring(3, 2);
var year = _dateString.Substring(6);
return new DateTime(int.Parse(year), int.Parse(month), int.Parse(day));
}
[Benchmark]
public DateTime Span()
{
ReadOnlySpan<char> dateSpan = _dateString;
var day = dateSpan.Slice(0, 2);
var month = dateSpan.Slice(3, 2);
var year = dateSpan.Slice(6);
return new DateTime(int.Parse(year), int.Parse(month), int.Parse(day));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment