using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; namespace SpanTDemo { class Program { static void Main(string[] args) { //BenchmarkRunner.Run(); BenchmarkRunner.Run(); } } [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 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 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)); } } }