gpt4 book ai didi

c# - 获取字节子数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:17:02 25 4
gpt4 key购买 nike

在 C# 中,如何获取这样的字节子数组

byte[] arrByte1 = {11,22,33,44,55,66}

我需要引用两个字节的子数组,例如 33 和 44 值。

我发现有多个选项,例如 C# 中的 Array.Copy、ArraySegment、LINQ(Skip and Take)。从性能的角度来看,最好的解决方案是什么?

最佳答案

简单的性能测试:

public void Test()
{
const int MAX = 1000000;

byte[] arrByte1 = { 11, 22, 33, 44, 55, 66 };
byte[] arrByte2 = new byte[2];
Stopwatch sw = new Stopwatch();

// Array.Copy
sw.Start();
for (int i = 0; i < MAX; i++)
{
Array.Copy(arrByte1, 2, arrByte2, 0, 2);
}
sw.Stop();
Console.WriteLine("Array.Copy: {0}ms", sw.ElapsedMilliseconds);

// Linq
sw.Restart();
for (int i = 0; i < MAX; i++)
{
arrByte2 = arrByte1.Skip(2).Take(2).ToArray();
}
sw.Stop();
Console.WriteLine("Linq: {0}ms", sw.ElapsedMilliseconds);
}

结果:

Array.Copy: 28ms
Linq: 189ms

大数据性能测试:

public void Test()
{
const int MAX = 1000000;

int[] arrByte1 = Enumerable.Range(0, 1000).ToArray();
int[] arrByte2 = new int[500];
Stopwatch sw = new Stopwatch();

// Array.Copy
sw.Start();
for (int i = 0; i < MAX; i++)
{
Array.Copy(arrByte1, 500, arrByte2, 0, 500);
}
sw.Stop();
Console.WriteLine("Array.Copy: {0}ms", sw.ElapsedMilliseconds);

// Linq
sw.Restart();
for (int i = 0; i < MAX; i++)
{
arrByte2 = arrByte1.Skip(500).Take(500).ToArray();
}
sw.Stop();
Console.WriteLine("Linq: {0}ms", sw.ElapsedMilliseconds);
}

结果:

Array.Copy: 186ms
Linq: 12666ms

如您所见,在大数据上 linq 有问题。

关于c# - 获取字节子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30636113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com