PerfUtils Documentation
This article introduces the KZDev.PerfUtils
library package, which includes MemoryStreamSlim, StringBuilderCache, InterlockedOps, and a series of compression helper classes. The following sections provide insights into usage, class operations, and performance benchmarks. For a full API reference, see the API Reference.
MemoryStreamSlim
The standard MemoryStream
class in the .NET Class Library represents a stream of bytes stored in memory. While it is convenient for working with in-memory data, it has limitations. One major limitation is its reliance on a single byte array to store data, which can lead to significant garbage collection (GC) pressure when handling large amounts of memory or frequently creating and disposing of MemoryStream
instances.
The MemoryStreamSlim
class is specifically designed to address these limitations. It improves performance in scenarios where MemoryStream would cause high GC pressure and also provides better overall throughput.
Key topics for MemoryStreamSlim include:
- The
Memory Stream
topic, which explains how to use the MemoryStreamSlim class, its features, and its internal workings. - The
Memory Management
topic, which provides insights into memory management and options for controlling it. - The
Memory Monitoring
topic, which discusses how to monitor memory usage and allocations with MemoryStreamSlim using the .NET Metrics and Events features. - The
Benchmarks
topic, which covers performance benchmarks demonstrating the benefits of MemoryStreamSlim.
Compression Helpers
MemoryStreamSlim is complemented by compression helper classes that compress data into MemoryStreamSlim instances, reducing memory allocation for compressed data. These classes provide a simple interface for compressing and decompressing data.
For more details, see the Compression topic, which explains how to use these helper classes and their performance benefits.
StringBuilderCache
The StringBuilder class is a mutable string class that is more memory-efficient than repeated string concatenation. However, frequent allocation and deallocation of StringBuilder instances and their internal buffers can cause memory pressure in high-throughput scenarios.
The StringBuilderCache
class is a static, thread-safe cache of StringBuilder instances. It reduces the number of allocations and deallocations, improving performance in scenarios with frequent string manipulations.
Key topics for StringBuilderCache
include:
- The
StringBuilderCache
topic, which explains how to use the class and its benefits. - The
Benchmarks
topic, which provides performance benchmarks for StringBuilderCache.
Interlocked Operations
The Interlocked class in the .NET Class Library provides atomic operations for thread-safe updates to shared variables. However, its functionality is limited to basic operations.
The InterlockedOps
class extends the functionality of Interlocked by providing additional atomic operations, including:
- Xor: Performs an exclusive OR operation on any integer type.
- ClearBits: Clears bits on any integer type.
- SetBits: Sets bits on any integer type.
- ConditionAnd: Conditionally updates bits using an AND operation.
- ConditionOr: Conditionally updates bits using an OR operation.
- ConditionXor: Conditionally updates bits using an XOR operation.
- ConditionClearBits: Conditionally clears bits.
- ConditionSetBits: Conditionally sets bits.
For more details, see the Interlocked Operations
topic.
Future Features
The roadmap for this package includes additional performance-focused utilities, which will be added as time permits.