Поскольку рекомендуется использовать шаблон IDisposal для больших объектов, мне интересно, почему не существует надежного способа определения предела, с которого объект следует считать «большим»?
Внутренне существует такое различие: нижний предел для объектов, размещаемых на LOH.Всякий раз, когда он сообщается публично как 85k, одному из них одновременно запрещается полагаться на этот номер.
Специально для приложений, обрабатывающих большое количество «больших» массивов, этот предел обязательно необходим для реализации правильного управления памятью и предотвращения фрагментации LOH.С другой стороны, для «меньших» массивов IDisposal не имеет смысла с точки зрения использования памяти.Здесь сжатие GC работает намного лучше.
Почему нет такой вещи как
GC.GetLOHLimit()
или даже лучше:
bool GC.ArrayTargetForManualDisposal(Type type, int length);
Редактировать: Я знаю,Шаблон IDisposable - это всего лишь рекомендация для правильной обработки специальных объектов (например, «больших» или неуправляемых объектов).Мой вопрос не предполагает, будет ли специальная обработка для этих объектов во время выполнения.Я скорее прошу поддержки во время выполнения для разработчиков шаблона (может быть и других), чтобы знать, когда объект должен следовать специальному управлению памятью или нет.