1. Пределы памяти
Что ж, размер System.Object без каких-либо свойств составляет 8 байтов (указатели 2x32 бит) или 16 байтов в 64-битной системе. [РЕДАКТИРОВАТЬ:] На самом деле, я только что проверил в WinDbg, и размер x 12 на 32-разрядной (x) (x64).
Таким образом, в 32-битной системе вам потребуется оперативная память 24 ГБ (чего не может быть в 32-битной системе).
2. Дизайн программы
Я твердо верю, что такой большой список должен храниться не в памяти, а на каком-то другом носителе. Но в этом случае у вас всегда будет возможность создать класс cached , обертывающий List, который будет обрабатывать фактическое хранилище под капотом. Таким образом, тестирование размера перед добавлением является неправильным местом для проведения тестирования, ваша реализация List должна делать это сама, если вам это понадобится однажды.
3. Быть на безопасной стороне
Почему бы не добавить счетчик повторного входа в каждый метод, чтобы предотвратить переполнение стека? :)
Так что, да, это безумие, проверять это. :)