Let’s assume we have a simple internet socket, and it’s going to send 10 megabytes (because I want to ignore memory issues) of random data through.
Is there any performance difference or a best practice method that one should use for receiving data? The final output data should be represented by a byte[]. Yes I know writing an arbitrary amount of data to memory is bad, and if I was downloading a large file I wouldn’t be doing it like this. But for argument’s sake let’s ignore that and assume it’s a smallish amount of data. I also realise that the bottleneck here is probably not the memory management but rather the socket receiving. I just want to know what would be the most efficient method of receiving data.
A few dodgy ways can think of is:
-
Have a List and a buffer, after the buffer is full, add it to the list and at the end list.ToArray() to get the byte[]
-
Write the buffer to a memory stream, after its complete construct a byte[] of the stream.Length and read it all into it in order to get the byte[] output.
Is there a more efficient/better way of doing this?
Just write to a
MemoryStreamand then callToArray– that does the business of constructing an appropriately-sized byte array for you. That’s effectively what aList<byte>would be like anyway, but using aMemoryStreamwill be a lot simpler.