bil*_*lpg 1 .net c# memory arrays performance
C#的List <>有一组CopyTo函数,它们使用快速内存块拷贝将其内部数组的内容提取到另一个数组中.
有没有办法反过来做到这一点?它可能看起来像......
var buffer = new List<byte>();
buffer.AddRange(afewbytes);
buffer.AddFromArray(myArray, startIndex, countBytesToCopy);
buffer.AddRange(afewmorebytes);
Run Code Online (Sandbox Code Playgroud)
由于我的List是List <byte>变种,我宁愿避免一个逐字节复制的循环.
该List<T>(IEnumerable<T>)构造函数将使用ICollection<T>.CopyTo如果集合工具ICollection<T>,它byte[]会做.
如果您只想提取部分数组,那么这不会直接帮助,但您可以创建自己的ByteArraySegment类ICollection<byte>,CopyTo使用Buffer.BlockCopy或者以下任何方式实现和实现操作:
public class ByteArraySegment : ICollection<byte>
{
private readonly byte[] array;
private readonly int start;
private readonly int count;
public ByteArraySegment(...)
{
// Obvious code
}
public void CopyTo(byte[] target, int index)
{
Buffer.BlockCopy(array, start, target, index, count);
}
// Other ICollection<T> members
}
Run Code Online (Sandbox Code Playgroud)
然后:
List<byte> bytes = new List<byte>(new ByteArraySegment(myArray, start, count));
Run Code Online (Sandbox Code Playgroud)
(或使用AddRange具有相同优化的.)