I can read unmanaged memory in C# using UnmanagedMemoryStream, but how can I do the reverse?
I want to read from a managed stream directly into unmanaged memory, instead of first reading into a byte[] and then copying. I’m doing async stream reading on a large number of requests, so the added memory is significant (not to mention the additional copy).
I think that it is not really possible. When you talk about a managed stream, I suppose you are refering to an instance of System.IO.Stream or a subclass hereof.
The members of this class take byte[] as a parameter, and that is a managed class.
I guess that the closest you can come is creating a managed byte[], and then creating a byte* in an unsafe block, and then passing the byte* to whatever needs an unmanaged reference:
But that is not exactly what you’re asking for
edit: Be careful though. You mention something about async reads. As soon as you’re outside the fixed boundary, the GC may move the array around in memory. And if you’ve passed the pointer to some “unsafe” function that continues to operate in a different thread, the pointer will point to an invalid memory location.