Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在IIS 7托管的ASP.Net应用程序中使用线程以避免堆栈溢出异常的意见和建议_Asp.net_Multithreading_Iis_Stack Overflow_Thread Safety - Fatal编程技术网

在IIS 7托管的ASP.Net应用程序中使用线程以避免堆栈溢出异常的意见和建议

在IIS 7托管的ASP.Net应用程序中使用线程以避免堆栈溢出异常的意见和建议,asp.net,multithreading,iis,stack-overflow,thread-safety,Asp.net,Multithreading,Iis,Stack Overflow,Thread Safety,在ASP.Net web应用程序中,当要运行堆栈密集型操作时,当堆栈大小超过IIS设置的256K限制时,会在IIS上引发stackoverflow异常。但是,常规winform应用程序有1MB的限制。因此,在Winform应用程序中运行相同操作时不会发生异常 这里没有递归或任何其他特定于代码的问题 有一些方法可以解决这个问题,比如在w3wp.exe上使用EditBin,但它不受支持 另一种选择是修改实际代码,以减少局部变量的大小,从而减少堆栈大小,这可能涉及重大的设计、代码更改 但以下方法解决了

在ASP.Net web应用程序中,当要运行堆栈密集型操作时,当堆栈大小超过IIS设置的256K限制时,会在IIS上引发stackoverflow异常。但是,常规winform应用程序有1MB的限制。因此,在Winform应用程序中运行相同操作时不会发生异常

这里没有递归或任何其他特定于代码的问题

有一些方法可以解决这个问题,比如在w3wp.exe上使用EditBin,但它不受支持

另一种选择是修改实际代码,以减少局部变量的大小,从而减少堆栈大小,这可能涉及重大的设计、代码更改

但以下方法解决了在单独线程上运行堆栈密集型操作时的问题,明确指定1MB的大小

Thread thread = new Thread(() =>
{
    RunStackIntensiveOperation(someObject);
}, 1048576);
thread.Start();
thread.Join();
我将采用第三种方法。然而,我很好奇是否有其他人也有类似的情况,并且由于“在独立线程上操作”的方法而遇到问题

如果我运行一个单独的线程,可能会发生什么问题?需要注意的是什么


意见,建议请…

有一种方法可以将堆栈大小更改回1 MiB或更多。您可以使用EDITBIT命令。这是做这件事的信息

另一方面,从部署的角度来看,修改IIS二进制文件(即w3wp.exe)看起来并不好

额外线程的警告与性能相关。额外的线程将消耗1 MiB内存。如果有很多对你的web应用的请求,你可以更快地耗尽内存


为了减少内存使用,您可以使用堆栈大小正确的线程创建自定义线程池。

有一种方法可以将堆栈大小更改回1 MiB甚至更多。您可以使用EDITBIT命令。这是做这件事的信息

另一方面,从部署的角度来看,修改IIS二进制文件(即w3wp.exe)看起来并不好

额外线程的警告与性能相关。额外的线程将消耗1 MiB内存。如果有很多对你的web应用的请求,你可以更快地耗尽内存


为了减少内存使用,您可以使用堆栈大小合适的线程创建自定义线程池。

您在做什么,使堆栈如此巨大?不管怎样,改变设计可能是一件非常好的事情……Jon同意需要改变设计,但由于所涉及的努力和复杂性,风险更大。最后我们不能按时发货:)为什么堆积如山?有几个函数携带的局部变量非常大,我们对“生成的代码”的控制非常少:)你在做什么使堆栈如此巨大?不管怎样,改变设计可能是一件非常好的事情……Jon同意需要改变设计,但由于所涉及的努力和复杂性,风险更大。最后我们不能按时发货:)为什么堆积如山?有几个函数携带的局部变量非常大,我们对“生成的代码”的控制非常少: