Is there a best (see below) way to append two byte arrays in C#?
Pretending I have complete control, I can make the first byte array sufficiently large to hold the second byte array at the end and use the Array.CopyTo function. Or I can loop over individual bytes and make an assignment.
Are there better ways? I can't imagine doing something like converting the byte arrays to string and joining them and converting them back would be better than either method above.
In terms of best/better (in order):
- Fastest
- Least RAM consumption
A constraint is that I must work in the .NET 2.0 framework.
The two choices recommended are MemoryStream and BlockCopy. I have run a simple speed test of 10,000,000 loops 3 times and got the following results:
Average of 3 runs of 10,000,000 loops in milliseconds:
- BlockCopy Time: 1154, with a range of 13 milliseconds
- MemoryStream GetBuffer Time: 1470, with a range of 14 milliseconds
- MemoryStream ToArray Time: 1895, with a range of 3 milliseconds
- CopyTo Time: 2079, with a range of 19 milliseconds
- Byte-by-byte Time: 2203, with a range of 10 milliseconds
Results of List<byte> AddRange over 10 million loops: List<byte> Time: 16694
Relative RAM Consumption (1 is baseline, higher is worse):
- Byte-by-byte: 1
- BlockCopy: 1
- Copy To: 1
- MemoryStream GetBuffer: 2.3
- MemoryStream ToArray: 3.3
- List<byte>: 4.2
The test shows that in general, unless you are doing a lot of byte copies [which I am], looking at byte copies is not worth a focus [e.g. 10 million runs yielding a difference of as much as 1.1 seconds].