Dre*_*mer 6 .net c# multithreading
如何找到当前线程的最大堆栈大小?
我在从MMC UI执行函数时遇到堆栈溢出异常,但没有从Powershell(命令行/控制台)执行.所以我有点猜测它与UI线程中分配的默认堆栈大小有关,而不是Powershell(命令行/控制台).
那么如何找到当前线程的最大堆栈大小?
我知道理想情况下,不需要知道这些或设置这些,但看起来它与堆栈大小有关,因为它从console/powershell(命令行应用程序)而不是UI.
注释(下面的线程有点相关.但它没有回答我的问题.可能会给出一些指导)
要获得有关实际问题的更多信息:
小智 5
从Windows 8开始,有GetCurrentThreadStackLimits()函数。您可以通过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
Run Code Online (Sandbox Code Playgroud)
在我的机器上,这在控制台应用程序中产生1MB,在Web应用程序(IIS)中产生256KB。
获取这些信息实际上是一个真正的 PITA:
ThreadBasicInformation
asTHREADINFOCLASS
来获取THREAD_BASIC_INFORMATION
结构。您现在拥有的参数是线程环境块TebBaseAddress
的地址。TebBaseAddress
地址。StackLimit
您要查找的值的属性。从第 3 步开始,它就没有记录了。这就是为什么我不建议检索此信息。
归档时间: |
|
查看次数: |
3148 次 |
最近记录: |