![[Pasted image 20240205142253.png]] Более конкретное название участка, где происходит аллокация: HashSet'1.System.Collections.Generic.IEnumerable\<T\>.GetEnumerator() Участок кода, который вызывает аллокацию памяти в куче: ```csharp hashSet.UnionWith(baseComponents); ``` Решением стало, просто заменить на `foreach` ```csharp foreach (var baseComp in baseComponents) { hashSet.Add(baseComp; } ``` ### Почему использование UnionWith вызывает аллокацию? Я так и не смог выяснить за короткое время Ответ ChatGPT на этот счет: **Почему аллокация памяти пропала?** При использовании цикла `foreach` и метода `Add`, вы, вероятно, избегаете накладных расходов, связанных с внутренней логикой метода `UnionWith`, которая может включать дополнительные проверки, промежуточные структуры для обработки элементов и потенциальное увеличение размера `HashSet`. В вашем случае, если размер `HashSet` был изначально достаточным или добавляемые элементы не требовали значительного увеличения размера внутреннего хранилища, то дополнительные аллокации в куче и не произошли бы. Это пример того, как более низкоуровневое управление операциями с коллекциями может привести к оптимизации по памяти, особенно в сценариях, где производительность и эффективность использования ресурсов критичны, как в вашем случае с разработкой игры.