Click or drag to resize

ParallelDeflateOutputStream Class

A class for compressing streams using the Deflate algorithm with multiple threads.
Inheritance Hierarchy

Namespace:  Atalasoft.PdfDoc.MidLevel.Ionic.Zlib
Assembly:  Atalasoft.PdfDoc (in Atalasoft.PdfDoc.dll) Version: 11.0.0.0.0.297 (.NET 4.5.2, x86)
Syntax
public class ParallelDeflateOutputStream : Stream

The ParallelDeflateOutputStream type exposes the following members.

Constructors
  NameDescription
Public methodCode exampleParallelDeflateOutputStream(Stream)
Create a ParallelDeflateOutputStream.
Public methodParallelDeflateOutputStream(Stream, CompressionLevel)
Create a ParallelDeflateOutputStream using the specified CompressionLevel.
Public methodParallelDeflateOutputStream(Stream, Boolean)
Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open when the ParallelDeflateOutputStream is closed.
Public methodParallelDeflateOutputStream(Stream, CompressionLevel, Boolean)
Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open when the ParallelDeflateOutputStream is closed.
Public methodParallelDeflateOutputStream(Stream, CompressionLevel, CompressionStrategy, Boolean)
Create a ParallelDeflateOutputStream using the specified CompressionLevel and CompressionStrategy, and specifying whether to leave the captive stream open when the ParallelDeflateOutputStream is closed.
Top
Properties
  NameDescription
Public propertyBufferSize
The size of the buffers used by the compressor threads.
Public propertyBytesProcessed
The total number of uncompressed bytes processed by the ParallelDeflateOutputStream.
Public propertyCanRead
Indicates whether the stream supports Read operations.
(Overrides StreamCanRead.)
Public propertyCanSeek
Indicates whether the stream supports Seek operations.
(Overrides StreamCanSeek.)
Public propertyCanTimeout
Gets a value that determines whether the current stream can time out.
(Inherited from Stream.)
Public propertyCanWrite
Indicates whether the stream supports Write operations.
(Overrides StreamCanWrite.)
Public propertyCrc32
The CRC32 for the data that was written out, prior to compression.
Public propertyLength
Reading this property always throws a NotSupportedException.
(Overrides StreamLength.)
Public propertyMaxBufferPairs
The maximum number of buffer pairs to use.
Public propertyPosition
Returns the current position of the output stream.
(Overrides StreamPosition.)
Public propertyReadTimeout
Gets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out.
(Inherited from Stream.)
Public propertyStrategy
The ZLIB strategy to be used during compression.
Public propertyWriteTimeout
Gets or sets a value, in miliseconds, that determines how long the stream will attempt to write before timing out.
(Inherited from Stream.)
Top
Methods
  NameDescription
Public methodBeginRead (Inherited from Stream.)
Public methodBeginWrite (Inherited from Stream.)
Public methodClose
Close the stream.
(Overrides StreamClose.)
Public methodCopyTo(Stream)
Reads the bytes from the current stream and writes them to another stream.
(Inherited from Stream.)
Public methodCopyTo(Stream, Int32)
Reads the bytes from the current stream and writes them to another stream, using a specified buffer size.
(Inherited from Stream.)
Public methodCopyToAsync(Stream)
Asynchronously reads the bytes from the current stream and writes them to another stream.
(Inherited from Stream.)
Public methodCopyToAsync(Stream, Int32)
Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.
(Inherited from Stream.)
Public methodCopyToAsync(Stream, Int32, CancellationToken)
Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token.
(Inherited from Stream.)
Public methodCreateObjRef
Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.
(Inherited from MarshalByRefObject.)
Protected methodCreateWaitHandle Obsolete.
Allocates a WaitHandle object.
(Inherited from Stream.)
Public methodDispose
Dispose the object
Protected methodDispose(Boolean)
The Dispose method
(Overrides StreamDispose(Boolean).)
Public methodEndRead (Inherited from Stream.)
Public methodEndWrite (Inherited from Stream.)
Public methodEquals
Determines whether the specified object is equal to the current object.
(Inherited from Object.)
Protected methodFinalize
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object.)
Public methodFlush
Flush the stream.
(Overrides StreamFlush.)
Public methodFlushAsync
Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.
(Inherited from Stream.)
Public methodFlushAsync(CancellationToken)
Asynchronously clears all buffers for this stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.
(Inherited from Stream.)
Public methodGetHashCode
Serves as the default hash function.
(Inherited from Object.)
Public methodGetLifetimeService
Retrieves the current lifetime service object that controls the lifetime policy for this instance.
(Inherited from MarshalByRefObject.)
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodInitializeLifetimeService
Obtains a lifetime service object to control the lifetime policy for this instance.
(Inherited from MarshalByRefObject.)
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Protected methodMemberwiseClone(Boolean)
Creates a shallow copy of the current MarshalByRefObject object.
(Inherited from MarshalByRefObject.)
Protected methodObjectInvariant Obsolete.
Provides support for a Contract.
(Inherited from Stream.)
Public methodRead
This method always throws a NotSupportedException.
(Overrides StreamRead(Byte, Int32, Int32).)
Public methodReadAsync(Byte, Int32, Int32)
Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.
(Inherited from Stream.)
Public methodReadAsync(Byte, Int32, Int32, CancellationToken)
Asynchronously reads a sequence of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests.
(Inherited from Stream.)
Public methodReadByte
Reads a byte from the stream and advances the position within the stream by one byte, or returns -1 if at the end of the stream.
(Inherited from Stream.)
Public methodCode exampleReset
Resets the stream for use with another stream.
Public methodSeek
This method always throws a NotSupportedException.
(Overrides StreamSeek(Int64, SeekOrigin).)
Public methodSetLength
This method always throws a NotSupportedException.
(Overrides StreamSetLength(Int64).)
Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Public methodWrite
Write data to the stream.
(Overrides StreamWrite(Byte, Int32, Int32).)
Public methodWriteAsync(Byte, Int32, Int32)
Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.
(Inherited from Stream.)
Public methodWriteAsync(Byte, Int32, Int32, CancellationToken)
Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.
(Inherited from Stream.)
Public methodWriteByte
Writes a byte to the current position in the stream and advances the position within the stream by one byte.
(Inherited from Stream.)
Top
Remarks

This class performs DEFLATE compression through writing. For more information on the Deflate algorithm, see IETF RFC 1951, "DEFLATE Compressed Data Format Specification version 1.3."

This class is similar to DeflateStream, except that this class is for compression only, and this implementation uses an approach that employs multiple worker threads to perform the DEFLATE. On a multi-cpu or multi-core computer, the performance of this class can be significantly higher than the single-threaded DeflateStream, particularly for larger streams. How large? Anything over 10mb is a good candidate for parallel compression.

The tradeoff is that this class uses more memory and more CPU than the vanilla DeflateStream, and also is less efficient as a compressor. For large files the size of the compressed data stream can be less than 1% larger than the size of a compressed data stream from the vanialla DeflateStream. For smaller files the difference can be larger. The difference will also be larger if you set the BufferSize to be lower than the default value. Your mileage may vary. Finally, for small files, the ParallelDeflateOutputStream can be much slower than the vanilla DeflateStream, because of the overhead associated to using the thread pool.

See Also