Span‹T› е нов тип, който ще бъде наличен в .NET Core 2.1.

За да го опростите, можете да го разглеждате като масив от тип стойност
, който може да бъде разделенна подединица без разпределяне на памет.

В следващия раздел бих искал да представя няколко сравнителни тестаи примерни кодове.

Бенчмаркът сравнява производителността на нарязания масив с помощта на:

  • Копиране на масив
  • Размах‹T›
  • небезопасен указател

Бенчмарковете, налични в GitHub (той използва BenchmarkDotNet).

Всички бенчмаркове използват следния масив:

public int[] Data = Enumerable.Range(0, 10_000_000).ToArray();

Използването на класическата манипулация на масива е:

Span‹T› използва:

Указателят използва:

Резултатите бяха:

Method  |Mean         |Scaled |Rank   |Allocated  |
------- |------------:|------:|------:|----------:|
Array   |  4,966.5 us |  1.00 |     3 |    4032 B |
Span    |    162.9 us |  0.03 |     1 |       0 B |
Pointer |    175.3 us |  0.04 |     2 |       0 B |

Някои интересни факти за Span‹T›:

  • Добавете System.Memory NuGet, за да получите препратка към него.
  • Той не можеда бъде разпределен вHeap,
    следователно не може да бъде член на клас.
  • Той може да бъде член на реф структура.
  • Той блести, когато трябва да извършвате манипулации с низове като SubString
    например:
    “AbCD”.AsSpan() връща ReadOnlySpan‹char›
    — — — — — — — — — — — — — — — — — — — — — —
    това означава, че можете да използвате “ABCD”.AsSpan().Slice(2,1)
    вместо “ABCD”.Substring(2,1).

Можете да прочетете повече за това в Stephen Toubs Paper.