Полезные ссылки: - [[Оператор ==, Equals(), GetHashCode()]] ![[Pasted image 20240205135456.png]] Участок кода, где происходил аллокация в куче: ```csharp var ctfn = new Ctfn(componentType, fieldName); if (!_i.SovkaData._buffer.TryGetValue(ctfn, out var hashSet)) ``` Аллокация памяти в куче происходила из-за того, что я использую значимый тип (структуру, кортеж) в качестве ключа для `Dictionary`. Проблема в том, что происходит `boxing (упаковка)` в ссылочный тип. Так происходит, потому что к Equals параметром является `object`, что приводит к `boxing`. ```csharp public override bool Equals(object obj) ``` ### Решение 1 Использовать [[IEquatable<T>]]. [[IEquatable<T>#Пример использования|Пример использования]] ### Решение 2 Использовать [[EqualityComparer<T>]]