Sometimes when working with C# you discover some hidden gems. Some of them very useful, other ones a little bit harder to find a good way to benefit from their functionality. One of those hidden gems that I discovered some days ago is the RecyclableMemoryStream class. For this one I’m cheating a little bit as it is not part of the .NET Framework directly but released as a separate NuGet package by the Bing team.
What is it?
Microsoft.IO.RecyclableMemoryStream is a drop-in MemoryStream replacement with superior behavior for performance-critical systems. In particular it is optimized to do the following:
- Eliminate Large Object Heap allocations by using pooled buffers
- Incur far fewer gen 2 GCs, and spend far less time paused due to GC
- Avoid memory leaks by having a bounded pool size
- Avoid memory fragmentation
- Provide excellent debuggability
- Provide metrics for performance tracking
The code looks kinda boring as it uses the same semantics as the built-in MemoryStream class:
More information: http://www.philosophicalgeek.com/2015/02/06/announcing-microsoft-io-recycablememorystream/