1

现有代码:

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);

版本?:还有什么?

4

0 回答 0