Параметры `maxArrayLength` и `maxArraysPerBucket` влияют на работу пула массивов следующим образом:
1. `maxArrayLength`: Максимальная длина массива, которая может быть хранена в пуле. Если массив превышает эту длину, то он не будет помещен в пул и будет создан новый массив.
2. `maxArraysPerBucket`: Максимальное количество массивов, которые могут быть хранены в каждом "контейнере" в пуле. Контейнеры группируют массивы одинаковой длины и используются для более эффективного доступа к массивам. Если количество массивов в контейнере достигает этого значения, то новый массив создается вне пула.
Используя приведенный вами код:
```csharp
ArrayPool<int> pool = ArrayPool<int>.Create(1,1);
var a1=pool.Rent(5000000);
pool.Rent(5000000);
pool.Rent(5000000);
pool.Rent(5000000);
pool.Rent(5000000);
```
Вы задали значения `maxArrayLength = 1` и `maxArraysPerBucket = 1`, что означает, что пул будет иметь максимальный размер 1 элемент и в каждом контейнере может быть только 1 массив. Тем не менее, при вызове `pool.Rent(5000000)` пул массивов будет создан, так как этот массив превышает максимальную длину, заданную в `maxArrayLength`. Пул массивов не вызывает исключение при превышении максимальной длины, а просто создает новый массив вне пула.
Что касается `pool.Return()`, этот метод возвращает массив в пул, чтобы его можно было использовать повторно. Вы не обязаны очищать или обнулять массив перед использованием метода `pool.Return()`. Когда вы вызываете `pool.Return()`, пул массивов принимает этот массив обратно и может позже предоставить его другому коду, который вызывает метод `pool.Rent()`. Внутри пула массивов могут быть выполнены определенные операции для подготовки массива к повторному использованию.