Мнения, предложения по использованию потока в размещенном в IIS 7 приложении ASP.Net во избежание исключения переполнения стека - PullRequest
2 голосов
/ 26 августа 2010

В веб-приложении ASP.Net, когда требуется выполнить операцию с интенсивным стеком, в IIS возникает исключение переполнения стека, когда размер стека пересекает установленное ограничение IIS, равное 256 КБ. Обычное приложение winform имеет ограничение в 1 МБ. Таким образом, исключение не возникнет при выполнении той же операции в приложении Winform.

Здесь нет рекурсии или других проблем, связанных с кодом.

Есть способы обойти эту проблему, например, использовать EditBin на w3wp.exe, но это не поддерживается.

Другой вариант - изменить реальный код, чтобы уменьшить размер локальных элементов и размер стека, что может повлечь за собой значительные изменения в дизайне.

Но следующий подход решает проблему при запуске интенсивной работы со стеком в отдельном потоке, явно указав размер 1 МБ.

Thread thread = new Thread(() =>
{
    RunStackIntensiveOperation(someObject);
}, 1048576);
thread.Start();
thread.Join();

Я иду с этим третьим подходом. Тем не менее, мне любопытно посмотреть, не сталкивался ли кто-либо с подобным сценарием и не сталкивался ли он с проблемами из-за подхода «работа в отдельном потоке».

Какие возможные проблемы могут возникнуть при запуске отдельного потока? О чем нужно знать?

Мнения, предложения, пожалуйста ...

1 Ответ

0 голосов
/ 28 июня 2011

Есть способ, как изменить размер стека обратно на 1 МБ или даже больше. Вы можете использовать команду EDITBIT. Вот информация , как сделать это.

С другой стороны, изменение двоичных файлов IIS, а именно w3wp.exe, не выглядит хорошим с точки зрения развертывания.

Предостережения с дополнительной нитью связаны с производительностью. Дополнительный поток будет занимать 1 МБ памяти. Если к вашему веб-приложению поступает много запросов, вам может не хватить памяти раньше.

Чтобы уменьшить использование памяти, вы можете создать собственный пул потоков с потоками, размер стека которых соответствует размеру.

...