Это ограничение для каждого процесса в Windows.Каждый процесс получает ~ 2 ГБ виртуального адресного пространства (это то, что использует Heap) на 32-битной машине.И я боюсь, что вы ничего не можете с этим поделать.
Грубо говоря, CLR может хранить до 1,6 ГБ объектов в памяти.Этого должно быть достаточно для большинства приложений.Если нет, то вам нужно поработать над вашим приложением.
В моем случае я столкнулся с подобной проблемой, а затем использовал SqlDataReader для извлечения объектов с указанным размером куска, обработки, вычисления, очистки из памяти.и затем загрузите другой фрагмент.
Существует также подробная статья по MSDN - Исследование проблем с памятью
Надеюсь, это будет полезно.