Предположим, я полагаю, что у среды выполнения есть какой-то секретный класс на основе генериков в рукаве
Ваши предположения почти верны. Логически вы можете думать о блоке как о магическом типе Box<T>
, который ведет себя так, как вы его описываете (с еще несколькими магическими моментами; например, способ, которым блок типов значений, допускающих обнуляемое значение, немного необычен.) Как фактическая деталь реализации, среда выполнения не делает это с универсальными типами.Бокс существовал в CLR v1, что было до того, как в систему типов были добавлены универсальные типы.
мое серверное приложение, стремящееся к производительности, делает довольно много в боксе, особенно в десятичных.
Если больно, когда вы это делаете, тогда прекратите это делать .Вместо того, чтобы пытаться сделать бокс дешевле, перестаньте делать это в первую очередь.Почему вы занимаетесь десятичной дробью?
Хуже того, эти ящики недолговечны, что заставляет меня подозревать, что я заплачу дважды: один раз за создание экземпляра ящика, а затем снова за сбор мусора после того, как я закончу с ним.
Кратковременный лучше , чем долгоживущий;с недолговечными объектами кучи вы платите, чтобы собрать их один раз и тогда они мертвы. С долгоживущими объектами кучи вы оплачиваете эту стоимость снова и снова, пока объект продолжает выживать.
Конечно, стоимость, о которой вы, вероятно, беспокоитесь относительно недолговечных объектов, нестоимость коллекции как таковой.Скорее, это сбор давления ;чем больше недолговечных объектов выделено, тем больше частых сборщиков мусора.
Стоимость выделения довольно минимальна.Переместите указатель на кучу GC, скопируйте десятичное число в это место, готово.
Если бы я сам выделял эту память, я бы рассмотрел здесь использование пула объектов.
Верно;вы платите больше за сбор долгоживущего объекта, но в целом вы делаете меньше сборов, потому что создается меньше давления.Это может быть победой.
Существует ли существующий механизм, побуждающий среду выполнения брать ящики из пула, а не создавать их?
Нет.
Какой тип экземпляра создается во время бокса?Можно ли вручную управлять процессом упаковки, но при этом быть совместимым с распаковкой?
Тип коробки - это тип упаковываемой вещи.Просто спросите об этом, вызвав GetType;это скажет тебе.Коробки волшебные;они - то, что они содержат.
Как я уже говорил, вместо того, чтобы пытаться удешевить бокс, просто не делайте этого в первую очередь.