所以我有一个字节数组,我需要从中删除前5个元素。无论如何,我在网上看了东西,找不到适合自己的东西。因此,我这样做了,从本质上讲,它非常慢,无法使用。
private byte[] fR(byte[] tb)
{
string b = "";
byte[] m = new byte[tb.Length - 5];
for (int a = 5; a < tb.Length; a++)
{
b = b + " " + tb.GetValue(a);
}
b = b.Remove(0, 1);
string[] rd = Regex.Split(b, " ");
for (int c = 0; c < rd.Length; c++)
{
byte curr = Convert.ToByte(rd[c]);
m.SetValue(curr, c);
}
return m;
}
我想问的是,是否有一种方法可以使此速度更快/得到改善。或者是我可以从字节数组中删除前5个元素的另一种方法。
更容易,更快:
byte[] src = ...;
byte[] dst = new byte[src.Length - 5];
Array.Copy(src, 5, dst, 0, dst.Length);
这将尽您所能。
如果使用的是C#8,则可以使用范围非常简洁地复制数组的一部分:
byte[] src = ...;
byte[] dst = src[5..];
LINQ在其他答案中使用的原因是,我90%的时间会更容易理解。但是,LINQ有其自身的开销,尤其是对于诸如此类的简单问题,如果性能很关键,我将不使用它。
您的代码很慢,因为您要将字节数组打包为字符串,然后将其拆包。摆脱字符串操作,它将很快。
您可以使用Linq:
tb.Skip(5).ToArray();
关于
tb.Skip(5).ToArray()
?