Skip to content

Instantly share code, notes, and snippets.

@nishanc
Created December 12, 2021 12:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save nishanc/d1f2ccf88061846e6ce3a182eec6710c to your computer and use it in GitHub Desktop.
Save nishanc/d1f2ccf88061846e6ce3a182eec6710c to your computer and use it in GitHub Desktop.
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