![[image (6).png]]
Если в `HashSet<T>` не хватает места для нового элемента (то есть, фактор заполнения превышает определённый порог), он должен увеличить свою вместимость. Это означает создание нового, большего массива и копирование существующих элементов в него, что также приводит к аллокации в куче.
### Как избежать аллокации памяти в куче
Укажите начальную емкость (`capacity`) при создании `HashSet`, если у вас есть оценка максимального количества элементов, чтобы избежать последующих расширений массива, что приведет к дополнительным аллокациям.
```csharp
// Предположим, что нам известно, что в нашем HashSet будет не более 1000 уникальных элементов
int capacity = 1000;
// Создаем экземпляр HashSet с начальной емкостью
// Это поможет уменьшить количество аллокаций памяти при добавлении элементов
HashSet<int> numbers = new HashSet<int>(capacity);
// Добавление элементов в HashSet
for(int i = 0; i < capacity; i++)
{
// Так как емкость заранее определена, аллокация памяти происходит только при инициализации
numbers.Add(i);
}
```