123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847 |
- <?xml version="1.0"?>
- <doc>
- <assembly>
- <name>Microsoft.IO.RecyclableMemoryStream</name>
- </assembly>
- <members>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager">
- <summary>
- Manages pools of RecyclableMemoryStream objects.
- </summary>
- <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.
- </remarks>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager.Events">
- <summary>
- ETW events for RecyclableMemoryStream
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.Events.Writer">
- <summary>
- Static log object, through which all events are written.
- </summary>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamBufferType">
- <summary>
- Type of buffer
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamBufferType.Small">
- <summary>
- Small block buffer
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamBufferType.Large">
- <summary>
- Large pool buffer
- </summary>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamDiscardReason">
- <summary>
- The possible reasons for discarding a buffer
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamDiscardReason.TooLarge">
- <summary>
- Buffer was too large to be re-pooled
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamDiscardReason.EnoughFree">
- <summary>
- There are enough free bytes in the pool
- </summary>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamCreated(System.Guid,System.String,System.Int32)">
- <summary>
- Logged when a stream object is created.
- </summary>
- <param name="guid">A unique ID for this stream.</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- <param name="requestedSize">Requested size of the stream</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamDisposed(System.Guid,System.String)">
- <summary>
- Logged when the stream is disposed
- </summary>
- <param name="guid">A unique ID for this stream.</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamDoubleDispose(System.Guid,System.String,System.String,System.String,System.String)">
- <summary>
- Logged when the stream is disposed for the second time.
- </summary>
- <param name="guid">A unique ID for this stream.</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- <param name="allocationStack">Call stack of initial allocation.</param>
- <param name="disposeStack1">Call stack of the first dispose.</param>
- <param name="disposeStack2">Call stack of the second dispose.</param>
- <remarks>Note: Stacks will only be populated if RecyclableMemoryStreamManager.GenerateCallStacks is true.</remarks>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamFinalized(System.Guid,System.String,System.String)">
- <summary>
- Logged when a stream is finalized.
- </summary>
- <param name="guid">A unique ID for this stream.</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- <param name="allocationStack">Call stack of initial allocation.</param>
- <remarks>Note: Stacks will only be populated if RecyclableMemoryStreamManager.GenerateCallStacks is true.</remarks>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamToArray(System.Guid,System.String,System.String,System.Int32)">
- <summary>
- Logged when ToArray is called on a stream.
- </summary>
- <param name="guid">A unique ID for this stream.</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- <param name="stack">Call stack of the ToArray call.</param>
- <param name="size">Length of stream</param>
- <remarks>Note: Stacks will only be populated if RecyclableMemoryStreamManager.GenerateCallStacks is true.</remarks>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamManagerInitialized(System.Int32,System.Int32,System.Int32)">
- <summary>
- Logged when the RecyclableMemoryStreamManager is initialized.
- </summary>
- <param name="blockSize">Size of blocks, in bytes.</param>
- <param name="largeBufferMultiple">Size of the large buffer multiple, in bytes.</param>
- <param name="maximumBufferSize">Maximum buffer size, in bytes.</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamNewBlockCreated(System.Int64)">
- <summary>
- Logged when a new block is created.
- </summary>
- <param name="smallPoolInUseBytes">Number of bytes in the small pool currently in use.</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamNewLargeBufferCreated(System.Int32,System.Int64)">
- <summary>
- Logged when a new large buffer is created.
- </summary>
- <param name="requiredSize">Requested size</param>
- <param name="largePoolInUseBytes">Number of bytes in the large pool in use.</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamNonPooledLargeBufferCreated(System.Int32,System.String,System.String)">
- <summary>
- Logged when a buffer is created that is too large to pool.
- </summary>
- <param name="requiredSize">Size requested by the caller</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- <param name="allocationStack">Call stack of the requested stream.</param>
- <remarks>Note: Stacks will only be populated if RecyclableMemoryStreamManager.GenerateCallStacks is true.</remarks>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamDiscardBuffer(Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamBufferType,System.String,Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamDiscardReason)">
- <summary>
- Logged when a buffer is discarded (not put back in the pool, but given to GC to clean up).
- </summary>
- <param name="bufferType">Type of the buffer being discarded.</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- <param name="reason">Reason for the discard.</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.Events.MemoryStreamOverCapacity(System.Int32,System.Int64,System.String,System.String)">
- <summary>
- Logged when a stream grows beyond the maximum capacity.
- </summary>
- <param name="requestedCapacity">The requested capacity.</param>
- <param name="maxCapacity">Maximum capacity, as configured by RecyclableMemoryStreamManager.</param>
- <param name="tag">A temporary ID for this stream, usually indicates current usage.</param>
- <param name="allocationStack">Call stack for the capacity request.</param>
- <remarks>Note: Stacks will only be populated if RecyclableMemoryStreamManager.GenerateCallStacks is true.</remarks>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager.EventHandler">
- <summary>
- Generic delegate for handling events without any arguments.
- </summary>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager.LargeBufferDiscardedEventHandler">
- <summary>
- Delegate for handling large buffer discard reports.
- </summary>
- <param name="reason">Reason the buffer was discarded.</param>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager.StreamLengthReportHandler">
- <summary>
- Delegate for handling reports of stream size when streams are allocated
- </summary>
- <param name="bytes">Bytes allocated.</param>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStreamManager.UsageReportEventHandler">
- <summary>
- Delegate for handling periodic reporting of memory use statistics.
- </summary>
- <param name="smallPoolInUseBytes">Bytes currently in use in the small pool.</param>
- <param name="smallPoolFreeBytes">Bytes currently free in the small pool.</param>
- <param name="largePoolInUseBytes">Bytes currently in use in the large pool.</param>
- <param name="largePoolFreeBytes">Bytes currently free in the large pool.</param>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.DefaultBlockSize">
- <summary>
- Default block size, in bytes
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.DefaultLargeBufferMultiple">
- <summary>
- Default large buffer multiple, in bytes
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStreamManager.DefaultMaximumBufferSize">
- <summary>
- Default maximum buffer size, in bytes
- </summary>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.#ctor">
- <summary>
- Initializes the memory manager with the default block/buffer specifications.
- </summary>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.#ctor(System.Int32,System.Int32,System.Int32)">
- <summary>
- Initializes the memory manager with the given block requiredSize.
- </summary>
- <param name="blockSize">Size of each block that is pooled. Must be > 0.</param>
- <param name="largeBufferMultiple">Each large buffer will be a multiple of this value.</param>
- <param name="maximumBufferSize">Buffers larger than this are not pooled</param>
- <exception cref="T:System.ArgumentOutOfRangeException">blockSize is not a positive number, or largeBufferMultiple is not a positive number, or maximumBufferSize is less than blockSize.</exception>
- <exception cref="T:System.ArgumentException">maximumBufferSize is not a multiple of largeBufferMultiple</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.#ctor(System.Int32,System.Int32,System.Int32,System.Boolean)">
- <summary>
- Initializes the memory manager with the given block requiredSize.
- </summary>
- <param name="blockSize">Size of each block that is pooled. Must be > 0.</param>
- <param name="largeBufferMultiple">Each large buffer will be a multiple/exponential of this value.</param>
- <param name="maximumBufferSize">Buffers larger than this are not pooled</param>
- <param name="useExponentialLargeBuffer">Switch to exponential large buffer allocation strategy</param>
- <exception cref="T:System.ArgumentOutOfRangeException">blockSize is not a positive number, or largeBufferMultiple is not a positive number, or maximumBufferSize is less than blockSize.</exception>
- <exception cref="T:System.ArgumentException">maximumBufferSize is not a multiple/exponential of largeBufferMultiple</exception>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.BlockSize">
- <summary>
- The size of each block. It must be set at creation and cannot be changed.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.LargeBufferMultiple">
- <summary>
- All buffers are multiples/exponentials of this number. It must be set at creation and cannot be changed.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.UseMultipleLargeBuffer">
- <summary>
- Use multiple large buffer allocation strategy. It must be set at creation and cannot be changed.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.UseExponentialLargeBuffer">
- <summary>
- Use exponential large buffer allocation strategy. It must be set at creation and cannot be changed.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.MaximumBufferSize">
- <summary>
- Gets the maximum buffer size.
- </summary>
- <remarks>Any buffer that is returned to the pool that is larger than this will be
- discarded and garbage collected.</remarks>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.SmallPoolFreeSize">
- <summary>
- Number of bytes in small pool not currently in use
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.SmallPoolInUseSize">
- <summary>
- Number of bytes currently in use by stream from the small pool
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.LargePoolFreeSize">
- <summary>
- Number of bytes in large pool not currently in use
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.LargePoolInUseSize">
- <summary>
- Number of bytes currently in use by streams from the large pool
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.SmallBlocksFree">
- <summary>
- How many blocks are in the small pool
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.LargeBuffersFree">
- <summary>
- How many buffers are in the large pool
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.MaximumFreeSmallPoolBytes">
- <summary>
- How many bytes of small free blocks to allow before we start dropping
- those returned to us.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.MaximumFreeLargePoolBytes">
- <summary>
- How many bytes of large free buffers to allow before we start dropping
- those returned to us.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.MaximumStreamCapacity">
- <summary>
- Maximum stream capacity in bytes. Attempts to set a larger capacity will
- result in an exception.
- </summary>
- <remarks>A value of 0 indicates no limit.</remarks>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.GenerateCallStacks">
- <summary>
- Whether to save callstacks for stream allocations. This can help in debugging.
- It should NEVER be turned on generally in production.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.AggressiveBufferReturn">
- <summary>
- Whether dirty buffers can be immediately returned to the buffer pool. E.g. when GetBuffer() is called on
- a stream and creates a single large buffer, if this setting is enabled, the other blocks will be returned
- to the buffer pool immediately.
- Note when enabling this setting that the user is responsible for ensuring that any buffer previously
- retrieved from a stream which is subsequently modified is not used after modification (as it may no longer
- be valid).
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStreamManager.ThrowExceptionOnToArray">
- <summary>
- Causes an exception to be thrown if ToArray is ever called.
- </summary>
- <remarks>Calling ToArray defeats the purpose of a pooled buffer. Use this property to discover code that is calling ToArray. If this is
- set and stream.ToArray() is called, a NotSupportedException will be thrown.</remarks>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetBlock">
- <summary>
- Removes and returns a single block from the pool.
- </summary>
- <returns>A byte[] array</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetLargeBuffer(System.Int32,System.String)">
- <summary>
- Returns a buffer of arbitrary size from the large buffer pool. This buffer
- will be at least the requiredSize and always be a multiple/exponential of largeBufferMultiple.
- </summary>
- <param name="requiredSize">The minimum length of the buffer</param>
- <param name="tag">The tag of the stream returning this buffer, for logging if necessary.</param>
- <returns>A buffer of at least the required size.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.ReturnLargeBuffer(System.Byte[],System.String)">
- <summary>
- Returns the buffer to the large pool
- </summary>
- <param name="buffer">The buffer to return.</param>
- <param name="tag">The tag of the stream returning this buffer, for logging if necessary.</param>
- <exception cref="T:System.ArgumentNullException">buffer is null</exception>
- <exception cref="T:System.ArgumentException">buffer.Length is not a multiple/exponential of LargeBufferMultiple (it did not originate from this pool)</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.ReturnBlocks(System.Collections.Generic.ICollection{System.Byte[]},System.String)">
- <summary>
- Returns the blocks to the pool
- </summary>
- <param name="blocks">Collection of blocks to return to the pool</param>
- <param name="tag">The tag of the stream returning these blocks, for logging if necessary.</param>
- <exception cref="T:System.ArgumentNullException">blocks is null</exception>
- <exception cref="T:System.ArgumentException">blocks contains buffers that are the wrong size (or null) for this memory manager</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream">
- <summary>
- Retrieve a new MemoryStream object with no tag and a default initial capacity.
- </summary>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.Guid)">
- <summary>
- Retrieve a new MemoryStream object with no tag and a default initial capacity.
- </summary>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.String)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and a default initial capacity.
- </summary>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.Guid,System.String)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and a default initial capacity.
- </summary>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.String,System.Int32)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and at least the given capacity.
- </summary>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <param name="requiredSize">The minimum desired capacity for the stream.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.Guid,System.String,System.Int32)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and at least the given capacity.
- </summary>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <param name="requiredSize">The minimum desired capacity for the stream.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.Guid,System.String,System.Int32,System.Boolean)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and at least the given capacity, possibly using
- a single contiguous underlying buffer.
- </summary>
- <remarks>Retrieving a MemoryStream which provides a single contiguous buffer can be useful in situations
- where the initial size is known and it is desirable to avoid copying data between the smaller underlying
- buffers to a single large one. This is most helpful when you know that you will always call GetBuffer
- on the underlying stream.</remarks>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <param name="requiredSize">The minimum desired capacity for the stream.</param>
- <param name="asContiguousBuffer">Whether to attempt to use a single contiguous buffer.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.String,System.Int32,System.Boolean)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and at least the given capacity, possibly using
- a single contiguous underlying buffer.
- </summary>
- <remarks>Retrieving a MemoryStream which provides a single contiguous buffer can be useful in situations
- where the initial size is known and it is desirable to avoid copying data between the smaller underlying
- buffers to a single large one. This is most helpful when you know that you will always call GetBuffer
- on the underlying stream.</remarks>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <param name="requiredSize">The minimum desired capacity for the stream.</param>
- <param name="asContiguousBuffer">Whether to attempt to use a single contiguous buffer.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.Guid,System.String,System.Byte[],System.Int32,System.Int32)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and with contents copied from the provided
- buffer. The provided buffer is not wrapped or used after construction.
- </summary>
- <remarks>The new stream's position is set to the beginning of the stream when returned.</remarks>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <param name="buffer">The byte buffer to copy data from.</param>
- <param name="offset">The offset from the start of the buffer to copy from.</param>
- <param name="count">The number of bytes to copy from the buffer.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.Byte[])">
- <summary>
- Retrieve a new MemoryStream object with the contents copied from the provided
- buffer. The provided buffer is not wrapped or used after construction.
- </summary>
- <remarks>The new stream's position is set to the beginning of the stream when returned.</remarks>
- <param name="buffer">The byte buffer to copy data from.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStreamManager.GetStream(System.String,System.Byte[],System.Int32,System.Int32)">
- <summary>
- Retrieve a new MemoryStream object with the given tag and with contents copied from the provided
- buffer. The provided buffer is not wrapped or used after construction.
- </summary>
- <remarks>The new stream's position is set to the beginning of the stream when returned.</remarks>
- <param name="tag">A tag which can be used to track the source of the stream.</param>
- <param name="buffer">The byte buffer to copy data from.</param>
- <param name="offset">The offset from the start of the buffer to copy from.</param>
- <param name="count">The number of bytes to copy from the buffer.</param>
- <returns>A MemoryStream.</returns>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.BlockCreated">
- <summary>
- Triggered when a new block is created.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.BlockDiscarded">
- <summary>
- Triggered when a new block is created.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.LargeBufferCreated">
- <summary>
- Triggered when a new large buffer is created.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.StreamCreated">
- <summary>
- Triggered when a new stream is created.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.StreamDisposed">
- <summary>
- Triggered when a stream is disposed.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.StreamFinalized">
- <summary>
- Triggered when a stream is finalized.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.StreamLength">
- <summary>
- Triggered when a stream is finalized.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.StreamConvertedToArray">
- <summary>
- Triggered when a user converts a stream to array.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.LargeBufferDiscarded">
- <summary>
- Triggered when a large buffer is discarded, along with the reason for the discard.
- </summary>
- </member>
- <member name="E:Microsoft.IO.RecyclableMemoryStreamManager.UsageReport">
- <summary>
- Periodically triggered to report usage statistics.
- </summary>
- </member>
- <member name="T:Microsoft.IO.RecyclableMemoryStream">
- <summary>
- MemoryStream implementation that deals with pooling and managing memory streams which use potentially large
- buffers.
- </summary>
- <remarks>
- This class works in tandem with the RecyclableMemoryStreamManager to supply MemoryStream
- objects to callers, while avoiding these specific problems:
- 1. LOH allocations - since all large buffers are pooled, they will never incur a Gen2 GC
- 2. Memory waste - A standard memory stream doubles its size when it runs out of room. This
- leads to continual memory growth as each stream approaches the maximum allowed size.
- 3. Memory copying - Each time a MemoryStream grows, all the bytes are copied into new buffers.
- This implementation only copies the bytes when GetBuffer is called.
- 4. Memory fragmentation - By using homogeneous buffer sizes, it ensures that blocks of memory
- can be easily reused.
-
- The stream is implemented on top of a series of uniformly-sized blocks. As the stream's length grows,
- additional blocks are retrieved from the memory manager. It is these blocks that are pooled, not the stream
- object itself.
-
- The biggest wrinkle in this implementation is when GetBuffer() is called. This requires a single
- contiguous buffer. If only a single block is in use, then that block is returned. If multiple blocks
- are in use, we retrieve a larger buffer from the memory manager. These large buffers are also pooled,
- split by size--they are multiples/exponentials of a chunk size (1 MB by default).
-
- Once a large buffer is assigned to the stream the small blocks are NEVER again used for this stream. All operations take place on the
- large buffer. The large buffer can be replaced by a larger buffer from the pool as needed. All blocks and large buffers
- are maintained in the stream until the stream is disposed (unless AggressiveBufferReturn is enabled in the stream manager).
-
- </remarks>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStream.blocks">
- <summary>
- All of these blocks must be the same size
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStream.dirtyBuffers">
- <summary>
- This list is used to store buffers once they're replaced by something larger.
- This is for the cases where you have users of this class that may hold onto the buffers longer
- than they should and you want to prevent race conditions which could corrupt the data.
- </summary>
- </member>
- <member name="F:Microsoft.IO.RecyclableMemoryStream.largeBuffer">
- <summary>
- This is only set by GetBuffer() if the necessary buffer is larger than a single block size, or on
- construction if the caller immediately requests a single large buffer.
- </summary>
- <remarks>If this field is non-null, it contains the concatenation of the bytes found in the individual
- blocks. Once it is created, this (or a larger) largeBuffer will be used for the life of the stream.
- </remarks>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.Id">
- <summary>
- Unique identifier for this stream across its entire lifetime
- </summary>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.Tag">
- <summary>
- A temporary identifier for the current usage of this stream.
- </summary>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.MemoryManager">
- <summary>
- Gets the memory manager being used by this stream.
- </summary>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.AllocationStack">
- <summary>
- Callstack of the constructor. It is only set if MemoryManager.GenerateCallStacks is true,
- which should only be in debugging situations.
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.DisposeStack">
- <summary>
- Callstack of the Dispose call. It is only set if MemoryManager.GenerateCallStacks is true,
- which should only be in debugging situations.
- </summary>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.#ctor(Microsoft.IO.RecyclableMemoryStreamManager)">
- <summary>
- Allocate a new RecyclableMemoryStream object.
- </summary>
- <param name="memoryManager">The memory manager</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.#ctor(Microsoft.IO.RecyclableMemoryStreamManager,System.Guid)">
- <summary>
- Allocate a new RecyclableMemoryStream object.
- </summary>
- <param name="memoryManager">The memory manager</param>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.#ctor(Microsoft.IO.RecyclableMemoryStreamManager,System.String)">
- <summary>
- Allocate a new RecyclableMemoryStream object
- </summary>
- <param name="memoryManager">The memory manager</param>
- <param name="tag">A string identifying this stream for logging and debugging purposes</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.#ctor(Microsoft.IO.RecyclableMemoryStreamManager,System.Guid,System.String)">
- <summary>
- Allocate a new RecyclableMemoryStream object
- </summary>
- <param name="memoryManager">The memory manager</param>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <param name="tag">A string identifying this stream for logging and debugging purposes</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.#ctor(Microsoft.IO.RecyclableMemoryStreamManager,System.String,System.Int32)">
- <summary>
- Allocate a new RecyclableMemoryStream object
- </summary>
- <param name="memoryManager">The memory manager</param>
- <param name="tag">A string identifying this stream for logging and debugging purposes</param>
- <param name="requestedSize">The initial requested size to prevent future allocations</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.#ctor(Microsoft.IO.RecyclableMemoryStreamManager,System.Guid,System.String,System.Int32)">
- <summary>
- Allocate a new RecyclableMemoryStream object
- </summary>
- <param name="memoryManager">The memory manager</param>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <param name="tag">A string identifying this stream for logging and debugging purposes</param>
- <param name="requestedSize">The initial requested size to prevent future allocations</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.#ctor(Microsoft.IO.RecyclableMemoryStreamManager,System.Guid,System.String,System.Int32,System.Byte[])">
- <summary>
- Allocate a new RecyclableMemoryStream object
- </summary>
- <param name="memoryManager">The memory manager</param>
- <param name="id">A unique identifier which can be used to trace usages of the stream.</param>
- <param name="tag">A string identifying this stream for logging and debugging purposes</param>
- <param name="requestedSize">The initial requested size to prevent future allocations</param>
- <param name="initialLargeBuffer">An initial buffer to use. This buffer will be owned by the stream and returned to the memory manager upon Dispose.</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.Finalize">
- <summary>
- The finalizer will be called when a stream is not disposed properly.
- </summary>
- <remarks>Failing to dispose indicates a bug in the code using streams. Care should be taken to properly account for stream lifetime.</remarks>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.Dispose(System.Boolean)">
- <summary>
- Returns the memory used by this stream back to the pool.
- </summary>
- <param name="disposing">Whether we're disposing (true), or being called by the finalizer (false)</param>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.Close">
- <summary>
- Equivalent to Dispose
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.Capacity">
- <summary>
- Gets or sets the capacity
- </summary>
- <remarks>Capacity is always in multiples of the memory manager's block size, unless
- the large buffer is in use. Capacity never decreases during a stream's lifetime.
- Explicitly setting the capacity to a lower value than the current value will have no effect.
- This is because the buffers are all pooled by chunks and there's little reason to
- allow stream truncation.
-
- Writing past the current capacity will cause Capacity to automatically increase, until MaximumStreamCapacity is reached.
- </remarks>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.Length">
- <summary>
- Gets the number of bytes written to this stream.
- </summary>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.Position">
- <summary>
- Gets the current position in the stream
- </summary>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.CanRead">
- <summary>
- Whether the stream can currently read
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.CanSeek">
- <summary>
- Whether the stream can currently seek
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.CanTimeout">
- <summary>
- Always false
- </summary>
- </member>
- <member name="P:Microsoft.IO.RecyclableMemoryStream.CanWrite">
- <summary>
- Whether the stream can currently write
- </summary>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.GetBuffer">
- <summary>
- Returns a single buffer containing the contents of the stream.
- The buffer may be longer than the stream length.
- </summary>
- <returns>A byte[] buffer</returns>
- <remarks>IMPORTANT: Doing a Write() after calling GetBuffer() invalidates the buffer. The old buffer is held onto
- until Dispose is called, but the next time GetBuffer() is called, a new buffer from the pool will be required.</remarks>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.TryGetBuffer(System.ArraySegment{System.Byte}@)">
- <summary>
- Returns an ArraySegment that wraps a single buffer containing the contents of the stream.
- </summary>
- <param name="buffer">An ArraySegment containing a reference to the underlying bytes.</param>
- <returns>Always returns true.</returns>
- <remarks>GetBuffer has no failure modes (it always returns something, even if it's an empty buffer), therefore this method
- always returns a valid ArraySegment to the same buffer returned by GetBuffer.</remarks>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.ToArray">
- <summary>
- Returns a new array with a copy of the buffer's contents. You should almost certainly be using GetBuffer combined with the Length to
- access the bytes in this stream. Calling ToArray will destroy the benefits of pooled buffers, but it is included
- for the sake of completeness.
- </summary>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- <exception cref="T:System.NotSupportedException">The current RecyclableStreamManager object disallows ToArray calls.</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.Read(System.Byte[],System.Int32,System.Int32)">
- <summary>
- Reads from the current position into the provided buffer
- </summary>
- <param name="buffer">Destination buffer</param>
- <param name="offset">Offset into buffer at which to start placing the read bytes.</param>
- <param name="count">Number of bytes to read.</param>
- <returns>The number of bytes read</returns>
- <exception cref="T:System.ArgumentNullException">buffer is null</exception>
- <exception cref="T:System.ArgumentOutOfRangeException">offset or count is less than 0</exception>
- <exception cref="T:System.ArgumentException">offset subtracted from the buffer length is less than count</exception>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.SafeRead(System.Byte[],System.Int32,System.Int32,System.Int32@)">
- <summary>
- Reads from the specified position into the provided buffer
- </summary>
- <param name="buffer">Destination buffer</param>
- <param name="offset">Offset into buffer at which to start placing the read bytes.</param>
- <param name="count">Number of bytes to read.</param>
- <param name="streamPosition">Position in the stream to start reading from</param>
- <returns>The number of bytes read</returns>
- <exception cref="T:System.ArgumentNullException">buffer is null</exception>
- <exception cref="T:System.ArgumentOutOfRangeException">offset or count is less than 0</exception>
- <exception cref="T:System.ArgumentException">offset subtracted from the buffer length is less than count</exception>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.Write(System.Byte[],System.Int32,System.Int32)">
- <summary>
- Writes the buffer to the stream
- </summary>
- <param name="buffer">Source buffer</param>
- <param name="offset">Start position</param>
- <param name="count">Number of bytes to write</param>
- <exception cref="T:System.ArgumentNullException">buffer is null</exception>
- <exception cref="T:System.ArgumentOutOfRangeException">offset or count is negative</exception>
- <exception cref="T:System.ArgumentException">buffer.Length - offset is not less than count</exception>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.ToString">
- <summary>
- Returns a useful string for debugging. This should not normally be called in actual production code.
- </summary>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.WriteByte(System.Byte)">
- <summary>
- Writes a single byte to the current position in the stream.
- </summary>
- <param name="value">byte value to write</param>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.ReadByte">
- <summary>
- Reads a single byte from the current position in the stream.
- </summary>
- <returns>The byte at the current position, or -1 if the position is at the end of the stream.</returns>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.SafeReadByte(System.Int32@)">
- <summary>
- Reads a single byte from the specified position in the stream.
- </summary>
- <param name="streamPosition">The position in the stream to read from</param>
- <returns>The byte at the current position, or -1 if the position is at the end of the stream.</returns>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.SetLength(System.Int64)">
- <summary>
- Sets the length of the stream
- </summary>
- <exception cref="T:System.ArgumentOutOfRangeException">value is negative or larger than MaxStreamLength</exception>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.Seek(System.Int64,System.IO.SeekOrigin)">
- <summary>
- Sets the position to the offset from the seek location
- </summary>
- <param name="offset">How many bytes to move</param>
- <param name="loc">From where</param>
- <returns>The new position</returns>
- <exception cref="T:System.ObjectDisposedException">Object has been disposed</exception>
- <exception cref="T:System.ArgumentOutOfRangeException">offset is larger than MaxStreamLength</exception>
- <exception cref="T:System.ArgumentException">Invalid seek origin</exception>
- <exception cref="T:System.IO.IOException">Attempt to set negative position</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.WriteTo(System.IO.Stream)">
- <summary>
- Synchronously writes this stream's bytes to the argument stream.
- </summary>
- <param name="stream">Destination stream</param>
- <remarks>Important: This does a synchronous write, which may not be desired in some situations</remarks>
- <exception cref="T:System.ArgumentNullException">stream is null</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.WriteTo(System.IO.Stream,System.Int32,System.Int32)">
- <summary>
- Synchronously writes this stream's bytes, starting at offset, for count bytes, to the argument stream.
- </summary>
- <param name="stream">Destination stream</param>
- <param name="offset">Offset in source</param>
- <param name="count">Number of bytes to write</param>
- <exception cref="T:System.ArgumentNullException">stream is null</exception>
- <exception cref="T:System.ArgumentOutOfRangeException">Offset is less than 0, or offset + count is beyond this stream's length.</exception>
- </member>
- <member name="M:Microsoft.IO.RecyclableMemoryStream.ReleaseLargeBuffer">
- <summary>
- Release the large buffer (either stores it for eventual release or returns it immediately).
- </summary>
- </member>
- </members>
- </doc>
|