Довольно просто вызывать исключения из памяти в процессе.
Просто создайте цикл, который выделяет память в блоках, которые достаточно малы, чтобы не помещаться в кучу больших объектов (но не слишком много, что у вас есть, что вызывает исключение), а затем вы можете попытаться открыть меньший файл, и приведет к тому, что открытие файла не сможет выделить достаточно непрерывной памяти, и вы получите исключение OOM при открытии файла, не требуя огромного файла. Как то так ...
List<byte[]> items = new List<byte[]>();
for (int i = 0; i < 10000; i++)
{
byte[] c = new byte[160000];
items.Add(c);
}
byte[] next = new byte[1000000000];
Если вы запустите приведенный выше код как есть, вы получите исключение OOM в последней строке. Но если вы сначала закомментируете цикл, он будет выполнен без ошибок. Вам, вероятно, придется немного подправить цикл, чтобы каждый раз вызывать ошибку при открытии файла, но вы можете это сделать. Просто запустите цикл перед вызовом, чтобы открыть файл в тесте, и вы израсходовали большой кусок памяти, и ваше открытие должно завершиться неудачей.
Кроме того, вы можете посмотреть настройку параметра / 3GB, если это вариант для вас. Это не всегда правильный ответ, и с ним связаны недостатки, но он изменяет форму разделения виртуальной памяти с 2 ГБ / 2 ГБ на 1 ГБ / 3 ГБ, предоставляя вашему процессу доступ к большему виртуальному адресному пространству. Это даст вам немного больше места для файлов, которые вы можете открыть. Опять же, вы должны прочитать о недостатках этого, прежде чем использовать его в качестве решения, и убедиться, что оно того стоит, если это поможет вашей ситуации.
Здесь , как включить его на сервере