public RecyclableMemoryStreamManager()

in src/Elastic.Transport/Components/Providers/RecyclableMemoryStreamManager.cs [128:166]


	public RecyclableMemoryStreamManager(int blockSize, int largeBufferMultiple, int maximumBufferSize, bool useExponentialLargeBuffer)
	{
		if (blockSize <= 0) throw new ArgumentOutOfRangeException(nameof(blockSize), blockSize, "blockSize must be a positive number");

		if (largeBufferMultiple <= 0)
			throw new ArgumentOutOfRangeException(nameof(largeBufferMultiple),
				"largeBufferMultiple must be a positive number");

		if (maximumBufferSize < blockSize)
			throw new ArgumentOutOfRangeException(nameof(maximumBufferSize),
				"maximumBufferSize must be at least blockSize");

		BlockSize = blockSize;
		LargeBufferMultiple = largeBufferMultiple;
		MaximumBufferSize = maximumBufferSize;
		UseExponentialLargeBuffer = useExponentialLargeBuffer;

		if (!IsLargeBufferSize(maximumBufferSize))
			throw new ArgumentException(string.Format("maximumBufferSize is not {0} of largeBufferMultiple",
					UseExponentialLargeBuffer ? "an exponential" : "a multiple"),
				nameof(maximumBufferSize));

		_smallPool = new ConcurrentStack<byte[]>();
		var numLargePools = useExponentialLargeBuffer
			// ReSharper disable once PossibleLossOfFraction
			// Not our code assume loss is intentional
			? (int)Math.Log(maximumBufferSize / largeBufferMultiple, 2) + 1
			: maximumBufferSize / largeBufferMultiple;

		// +1 to store size of bytes in use that are too large to be pooled
		_largeBufferInUseSize = new long[numLargePools + 1];
		_largeBufferFreeSize = new long[numLargePools];

		_largePools = new ConcurrentStack<byte[]>[numLargePools];

		for (var i = 0; i < _largePools.Length; ++i) _largePools[i] = new ConcurrentStack<byte[]>();

		EventsWriter.MemoryStreamManagerInitialized(blockSize, largeBufferMultiple, maximumBufferSize);
	}