Что такое Box, Unbox и как можно избежать этого
Boxing в C# — это преобразование экземпляра типа-значения (например, int, struct) в ссылочный тип object или интерфейс. Unboxing — обратное приведение упакованного объекта обратно к исходному типу-значению. Избежать лишних операций boxing/unboxing можно, используя обобщения и коллекции из System.Collections.Generic, такие как List<T> и Dictionary<TKey, TValue>.
Boxing (упаковка) происходит, когда значение типа-значения приводится к типу object или к интерфейсу, который оно реализует. Внутри CLR создаётся новый объект в куче, в который копируется значение.
Unboxing (распаковка) — обратная операция: объект типа object или интерфейса приводится обратно к конкретному типу-значению. При этом выполняется проверка типа и копирование данных обратно в переменную-значение.
Проблема в том, что каждая упаковка и распаковка:
Частый источник неявного boxing — негенерик-коллекции (например, ArrayList) и API, принимающие параметры типа object. Чтобы избежать лишнего boxing/unboxing, нужно по возможности:
List<T>, Dictionary<TKey, TValue> и т.п.) вместо старых коллекций из System.Collections,object,object или неограниченный интерфейс, если это делается в горячем участке кода.Отметьте свой прогресс