В веб-приложении ASP.Net, когда требуется выполнить операцию с интенсивным стеком, в IIS возникает исключение переполнения стека, когда размер стека пересекает установленное ограничение IIS, равное 256 КБ. Обычное приложение winform имеет ограничение в 1 МБ. Таким образом, исключение не возникнет при выполнении той же операции в приложении Winform.
Здесь нет рекурсии или других проблем, связанных с кодом.
Есть способы обойти эту проблему, например, использовать EditBin на w3wp.exe, но это не поддерживается.
Другой вариант - изменить реальный код, чтобы уменьшить размер локальных элементов и размер стека, что может повлечь за собой значительные изменения в дизайне.
Но следующий подход решает проблему при запуске интенсивной работы со стеком в отдельном потоке, явно указав размер 1 МБ.
Thread thread = new Thread(() =>
{
RunStackIntensiveOperation(someObject);
}, 1048576);
thread.Start();
thread.Join();
Я иду с этим третьим подходом. Тем не менее, мне любопытно посмотреть, не сталкивался ли кто-либо с подобным сценарием и не сталкивался ли он с проблемами из-за подхода «работа в отдельном потоке».
Какие возможные проблемы могут возникнуть при запуске отдельного потока? О чем нужно знать?
Мнения, предложения, пожалуйста ...