如何找到当前线程的最大堆栈大小?
我在从 MMC UI 而不是从 Powershell(命令行/控制台)执行函数时遇到堆栈溢出异常。所以我猜测它与 UI 线程中分配的默认堆栈大小与 Powershell(命令行/控制台)中分配的默认堆栈大小有关。
那么如何找到当前线程的最大堆栈大小呢?
我知道理想情况下人们不需要知道这些或设置这些,但看起来它与堆栈大小有关,因为它是从控制台/Powershell(命令行应用程序)而不是从 UI 工作的。
下面的线程有点相关,但它没有回答我的问题;它可能给出了一些指导方针:
.NET 最大线程堆栈大小?
要获取有关实际问题的更多详细信息:
StackOverFlowException:是编程错误(递归)还是最大默认堆栈大小不够?
从 Windows 8 开始,有获取当前线程堆栈限制()功能。您可以通过 PInvoke 从 C# 使用它,如下所示:
[DllImport("kernel32.dll")]
static extern void GetCurrentThreadStackLimits(out uint lowLimit, out uint highLimit);
uint low;
uint high;
GetCurrentThreadStackLimits(out low, out high);
var size = (high - low) / 1024; // in KB
在我的机器上,这在控制台应用程序中产生 1MB,在 Web 应用程序 (IIS) 中产生 256KB。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)