RecyclableMemoryStreamManager class
December 6, 2023 · View on GitHub
Manages pools of RecyclableMemoryStream objects.
public sealed class RecyclableMemoryStreamManager
Public Members
| name | description |
|---|---|
| RecyclableMemoryStreamManager() | Initializes the memory manager with the default block/buffer specifications. This pool may have unbounded growth unless you modify Options. |
| RecyclableMemoryStreamManager(…) | Initializes the memory manager with the given block requiredSize. |
| LargeBuffersFree { get; } | How many buffers are in the large pool. |
| LargePoolFreeSize { get; } | Number of bytes in large pool not currently in use. |
| LargePoolInUseSize { get; } | Number of bytes currently in use by streams from the large pool. |
| Settings { get; } | Settings for controlling the behavior of RecyclableMemoryStream |
| SmallBlocksFree { get; } | How many blocks are in the small pool. |
| SmallPoolFreeSize { get; } | Number of bytes in small pool not currently in use. |
| SmallPoolInUseSize { get; } | Number of bytes currently in use by stream from the small pool. |
| event BlockCreated | Triggered when a new block is created. |
| event BufferDiscarded | Triggered when a buffer of either type is discarded, along with the reason for the discard. |
| event LargeBufferCreated | Triggered when a new large buffer is created. |
| event StreamConvertedToArray | Triggered when a user converts a stream to array. |
| event StreamCreated | Triggered when a new stream is created. |
| event StreamDisposed | Triggered when a stream is disposed. |
| event StreamDoubleDisposed | Triggered when a stream is disposed of twice (an error). |
| event StreamFinalized | Triggered when a stream is finalized. |
| event StreamLength | Triggered when a stream is disposed to report the stream's length. |
| event StreamOverCapacity | Triggered when a stream is requested to expand beyond the maximum length specified by the responsible RecyclableMemoryStreamManager. |
| event UsageReport | Periodically triggered to report usage statistics. |
| GetStream() | Retrieve a new RecyclableMemoryStream object with no tag and a default initial capacity. |
| GetStream(…) | Retrieve a new RecyclableMemoryStream object with no tag and a default initial capacity. (13 methods) |
| const DefaultBlockSize | Default block size, in bytes. |
| const DefaultLargeBufferMultiple | Default large buffer multiple, in bytes. |
| const DefaultMaximumBufferSize | Default maximum buffer size, in bytes. |
| class BlockCreatedEventArgs | Arguments for the BlockCreated event. |
| class BufferDiscardedEventArgs | Arguments for the BufferDiscarded event. |
| class Events | ETW events for RecyclableMemoryStream. |
| class LargeBufferCreatedEventArgs | Arguments for the LargeBufferCreated events. |
| class Options | Parameters for customizing the behavior of RecyclableMemoryStreamManager |
| class StreamConvertedToArrayEventArgs | Arguments for the StreamConvertedToArray event. |
| class StreamCreatedEventArgs | Arguments for the StreamCreated event. |
| class StreamDisposedEventArgs | Arguments for the StreamDisposed event. |
| class StreamDoubleDisposedEventArgs | Arguments for the StreamDoubleDisposed event. |
| class StreamFinalizedEventArgs | Arguments for the StreamFinalized event. |
| class StreamLengthEventArgs | Arguments for the StreamLength event. |
| class StreamOverCapacityEventArgs | Arguments for the StreamOverCapacity event. |
| class UsageReportEventArgs | Arguments for the UsageReport event. |
Remarks
There are two pools managed in here. The small pool contains same-sized buffers that are handed to streams as they write more data.
For scenarios that need to call GetBuffer, the large pool contains buffers of various sizes, all multiples/exponentials of LargeBufferMultiple (1 MB by default). They are split by size to avoid overly-wasteful buffer usage. There should be far fewer 8 MB buffers than 1 MB buffers, for example.
See Also
- namespace Microsoft.IO