Эта проблема не имеет никакого отношения к объему физической памяти в вашей системе, а также к тому, скомпилирована ли x64 или нет. Также не верно, что .NET должен ограничивать объекты до 2 ГБ. (Возможно, вы захотите изучить кучу больших объектов в .NET 4.5 для получения дополнительной информации об этом.) Причина, по которой вы получаете «Недостаточно памяти», заключается в том, что процесс не может отобразить непрерывный раздел памяти в запрошенном вами размере. *
Эрик Липперт имеет отличную статью в блоге на эту тему, и я заметил, что он прокомментировал этот вопрос, но, к сожалению, не ответил на него.
Итак, вот ответ: примите тот факт, что объем памяти, который вы ищете в этой реализации, не всегда доступен, и решите вашу проблему, разбив ее на более мелкие куски памяти.
У меня была такая же проблема, и мне пришлось использовать тот же подход. Работа с неровными массивами может помочь, или разбить ваши данные на несколько логических компонентов и создать серию меньших HashTables.