Размер разных поколений - это деталь реализации, и я не знаю ни одного способа настроить его для приложений .NET. Если память мне не изменяет, поколение 0 и 1 совместно используют один сегмент, а в Win32 - 16 МБ, поэтому, если вы создадите много объектов, некоторые из них будут преобразованы в более высокие поколения, если на них все еще есть ссылки ты опиши)
Я предполагаю, что идея ограничения размера поколения 0 состоит в том, чтобы коллекция g0 была дешевой. Если поколение 0 может вырасти до любого размера, ваша общая производительность, скорее всего, пострадает.
РЕДАКТИРОВАТЬ: Я считаю, что книга Джеффри Рихтера имеет некоторые подробности об этом, так что вы можете проверить это.
EDIT2: Рихтер заявляет (стр. 502-507), что начальный бюджет поколения 0 составляет 256 КБ, а первоначальный бюджет поколения 1 - 2 МБ. Однако это не размер поколения. Бюджеты корректируются по мере необходимости и будут увеличиваться и уменьшаться в зависимости от использования памяти приложением.
Однако в .NET Framework 2.0 от Joe Duffy утверждается, что поколения поколений (т.е. поколения 0 и 1) разделяют один сегмент, который обычно составляет 16 МБ (стр. 117). Только поколению 2 разрешено расти по мере необходимости (я предполагаю, что LOH также может расти по мере необходимости, но это не ясно из текста).