Процесс x86 / 32-битный пользовательский режим в Windows имеет только адресуемую виртуальную память объемом 2 ГБ. 64-разрядный процесс x64 / 64 имеет адресуемую виртуальную память 16 ТБ. Вы не сказали, был ли ваш процесс 32- или 64-битным, но я предполагаю, что 32-битный. Как только 32-разрядный процесс начинает выходить в область виртуальной или выделенной памяти объемом 1,5+ ГБ, в которую вы играете с огнем, и это вопрос времени, когда приложение вылетает. Нет точного и быстрого числа, когда оно рухнет, поскольку каждое приложение отличается.
Итак, давайте поговорим о «2 ГБ» адресуемого пространства ... память, используемая вашим приложением , НЕ имеет доступа ко всем 2 ГБ памяти. Существует много служебных данных, используемых CLR для запуска приложения:
- 8 различных куч для приложения .NET - см. Мой ответ на Использование памяти процессом .NET = 5x Память кучи CLR?
- Издержки ядра для запуска процесса пользовательского режима
- Тема
- и т.д.
Таким образом, в вашей системе могут быть доступны гигабайты памяти, но приложение может легко аварийно завершить работу, если это x86 и приближается к пределу, описанному выше.
Я разместил довольно много ответов и информации о памяти CLR здесь, в StackOverflow, описывающей, как многое из этого работает. Ищите мое имя и проверьте некоторые другие ответы. Это может помочь немного прояснить ситуацию.
НТН