Существующий код:
public class Header {
public Header(byte[] data)
{
// fill up some properties from the data byte[].
var subdata = new byte[16];
this.F = new Foo(Array.Copy(data, 0, subdata, 0, 16));
}
public Foo F {get; set; }
}
Существующий код работает следующим образом:
BinaryReader br = ....
var h = new Header(br.ReadBytes(64));
Такое ощущение, что его можно оптимизировать с помощью Span.
Мой код теперь выглядит как:
public class Header {
public Header(ReadOnlySpan<byte> data)
{
// fill up some properties from the data byte[].
this.F = new Foo(data.Slice(0, 16));
}
public Foo F {get; set; }
}
Теперь, какой вариант я должен использовать и почему?
Оригинальный код:
BinaryReader br = ....
var h = new Header(br.ReadBytes(64));
Версия 1:
BinaryReader br = ....
var h = new Header(br.ReadBytes(64).AsSpan());
// I guess this is the same:
BinaryReader br = ....
Span<byte> buf = br.ReadBytes(64);
var h = new Header(buf);
Версия 2:
BinaryReader br = ....
Span<byte> buffer = new byte[64];
br.Read(buffer);
var h = new Header(buffer);
Версия 3:
BinaryReader br = ....
Span<byte> buffer = stackalloc byte[64];
br.Read(buffer);
var h = new Header(buffer);
Версия?: Что-нибудь еще?