diff --git a/csharp/Platform.Collections/Arrays/ArrayPool[T].cs b/csharp/Platform.Collections/Arrays/ArrayPool[T].cs index 57e2ca9b..5479cc85 100644 --- a/csharp/Platform.Collections/Arrays/ArrayPool[T].cs +++ b/csharp/Platform.Collections/Arrays/ArrayPool[T].cs @@ -4,10 +4,13 @@ using Platform.Disposables; using Platform.Collections.Stacks; -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - namespace Platform.Collections.Arrays { + /// + /// Represents a set of arrays ready for reuse. + /// Представляет собой набор массивов готовых к повторному использованию. + /// + /// The array elements type.Тип элементов массива. /// /// Original idea from http://geekswithblogs.net/blackrob/archive/2014/12/18/array-pooling-in-csharp.aspx /// @@ -21,15 +24,43 @@ public class ArrayPool private readonly int _maxArraysPerSize; private readonly Dictionary> _pool = new Dictionary>(ArrayPool.DefaultSizesAmount); + /// + /// Initializes a new instance of the ArrayPool class using the specified maximum number of arrays per size. + /// Инициализирует новый экземпляр класса ArrayPool, используя указанное максимальное количество массивов на каждый размер. + /// + /// The maximum number of arrays in the pool per size.Максимальное количество массивов в пуле на каждый размер. [MethodImpl(MethodImplOptions.AggressiveInlining)] public ArrayPool(int maxArraysPerSize) => _maxArraysPerSize = maxArraysPerSize; + /// + /// Initializes a new instance of the ArrayPool class using the default maximum number of arrays per size. + /// Инициализирует новый экземпляр класса ArrayPool, используя максимальное количество массивов на каждый размер по умолчанию. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public ArrayPool() : this(ArrayPool.DefaultMaxArraysPerSize) { } + /// + /// Retrieves an array from the pool, which will automatically return to the pool when the container is disposed. + /// Извлекает из пула массив, который автоматически вернётся в пул при высвобождении контейнера. + /// + /// The allocated array size.Размер выделяемого массива. + /// + /// The disposable container containing either a new array or an array from the pool. + /// Высвобождаемый контейнер содержащий либо новый массив, либо массив из пула. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public Disposable AllocateDisposable(long size) => (Allocate(size), Free); + /// + /// Replaces the array with another array from the pool with the specified size. + /// Заменяет массив на другой массив из пула с указанным размером. + /// + /// The source array.Исходный массив. + /// A new array size.Новый размер массива. + /// + /// An array with a new size. + /// Массив с новым размером. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public Disposable Resize(Disposable source, long size) { @@ -44,12 +75,30 @@ public Disposable Resize(Disposable source, long size) return destination; } + /// + /// Clears the pool. + /// Очищает пул. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public virtual void Clear() => _pool.Clear(); + /// + /// Retrieves an array with the specified size from the pool. + /// Извлекает из пула массив с указанным размером. + /// + /// The allocated array size.Размер выделяемого массива. + /// + /// An array from the pool or a new array. + /// Массив из пула или новый массив. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public virtual T[] Allocate(long size) => size <= 0L ? Array.Empty() : _pool.GetOrDefault(size)?.PopOrDefault() ?? new T[size]; + /// + /// Frees the array to the pool for later reuse. + /// Освобождает массив в пул для последующего повторного использования. + /// + /// The array to be freed into the pool.Массив который нужно освободить в пул. [MethodImpl(MethodImplOptions.AggressiveInlining)] public virtual void Free(T[] array) { @@ -65,4 +114,4 @@ public virtual void Free(T[] array) stack.Push(array); } } -} +} \ No newline at end of file