Решение, которое я в итоге выбрал, состояло в том, чтобы установить максимальное значение для объема памяти, которое appPool было разрешено использовать. Затем код просто сожрал память, пока asp.net решил перезапустить appPool.
В расширенных настройках пула приложений я установил лимит частной памяти равным 800 000 КБ.
В разделе Catch, где произошел сбой кода Linq, я выделяю больше памяти, чем предел:
List<string> listOfMemory = new List<string>();
// in the app pool, you need to set the virtual memory limit to 800,000kb
log.Error("Allocating so much memory that the app pool will be forced to recycle... ");
for (int intCount = 1; intCount < 10000000; intCount++)
{
listOfMemory.Add("new string " + intCount.ToString());
}
Теперь это означает, что только около 4 потоков перестают работать до появления нового процесса w3wp. До этого решения потоки постоянно терпели неудачу, пока человек не перезапустил пул приложений вручную. К сожалению, если вы устанавливаете пул приложений на регулярную перезагрузку в течение определенного количества минут, чем меньше количество минут, тем чаще происходит сбой. И чем больше минут, тем больше сбоев будет.
Этот творческий обходной путь ограничивает урон.