![[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); } ```