.net IIS管理->;非托管->;管理->;栈溢出异常
我会尽可能详细地描述我的问题,但如果需要更详细的解释,请让我知道 为了简化,假设我有3个DLL(实际上我有更多,但我想这不是很重要):.net IIS管理->;非托管->;管理->;栈溢出异常,.net,iis,pinvoke,stack-overflow,unmanaged,.net,Iis,Pinvoke,Stack Overflow,Unmanaged,我会尽可能详细地描述我的问题,但如果需要更详细的解释,请让我知道 为了简化,假设我有3个DLL(实际上我有更多,但我想这不是很重要): managed-1.dll-托管dll(用C#.NET 4.0编写)-处理请求,在某些请求期间调用第二个dll中的非托管代码 unmanaged.dll-非托管dll(在旧式VC++6.0中编写)-执行多个操作,有时调用第三个dll managed-2.dll-托管dll(在CLI/C++.NET 3.5中编写)-我的问题的根源 我在3种不同的情况下运行代码:
managed-1.dll
-托管dll(用C#.NET 4.0编写)-处理请求,在某些请求期间调用第二个dll中的非托管代码unmanaged.dll
-非托管dll(在旧式VC++6.0中编写)-执行多个操作,有时调用第三个dllmanaged-2.dll
-托管dll(在CLI/C++.NET 3.5中编写)-我的问题的根源managed-1.dll
,一切正常managed-1.dll
——一切都很好IIS
调用managed-1.dll
——在涉及整个序列managed-1.dll->unmanaged.dll->managed-2.dll
之前,一切正常managed-1.dll::CallUnmanagedCode()
unmanaged.dll::SomeMethod1()
unmanaged.dll::SomeMethod2()
unmanaged.dll::CallManagedCode()
!!标记为managed-2.dll::CallUnmanagedCode()
,不使用任何托管类型强>\uu declspec(dllexport)
!!使用托管类型;在一开始(甚至第一行代码都没有执行)发生异常强>managed-2.dll::FailingMethod()
FailingMethod
中显示的参数值与方法调用点中的值不同
如果有人有任何线索,请提供建议
解决方案:该问题与托管的非托管内容无关,而是与。对我来说,使用该工具是不可接受的解决方案。所以我的解决方案是:在调用unmanaged.dll
之前创建新线程,并将堆栈设置为1MB:
var result = unchecked ((int)0x800000FF);
var thread = new Thread(() => { result = pinvoke_func(); }, 1024 * 1024); // 1MB
thread.Start();
thread.Join();
普通windows应用程序的堆栈大小显然是1MB,但IIS的堆栈大小是256KB(请参阅)。这也许可以解释为什么应用程序在控制台应用程序中运行,而不是在IIS中运行 我不知道ASP.NET开发服务器的堆栈大小,但可能是1MB,有关更多信息,请参阅此问题: 显然,可以使用editbin增加IIS的堆栈大小。
有关说明,请参阅本文:thanx获取提示!我想这可能是我问题的根源。我将尝试增加stacksize,并让您知道resultsLink以有效复制(但更老)问题:-还包括microsoft文章和显式线程创建解决方案。