现有代码:
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);
版本?:还有什么?