相关疑难解决方法(0)

在C#中检查堆栈大小

有没有办法在C#中检查线程堆栈大小?

c# stack multithreading

15
推荐指数
2
解决办法
8300
查看次数

最大线程堆栈大小.NET?

C#.NET 2.0中线程允许的最大堆栈大小是多少?此外,此值是否取决于CLR的版本和/或底层操作系统的位数(32或64)?我查看了以下资源msdn1msdn2

public Thread( ThreadStart start, int maxStackSize )

我能看到的唯一信息是默认大小为1兆字节,在上面的方法中,如果maxStackSize为'0',将使用可执行文件头中指定的默认最大堆栈大小,我们可以更改的最大值是多少标题中的值是什么?这样做也是可取的吗?谢谢.

size stack multithreading

13
推荐指数
2
解决办法
8967
查看次数

抛出异常时,使用Lazy <T>的StackOverflowException

一个非常简单的示例应用程序(.NET 4.6.2)在12737的递归深度处产生StackOverflowException ,如果最内部函数调用抛出异常(预期和正常),则递减深度为10243.

如果我使用a Lazy<T>来短暂保存中间结果,则StackOverflowException已经发生在2207的递归深度,如果没有抛出异常并且在递归深度为105,则抛出异常.

注意:如果编译为x64,则深度为105的StackOverflowException 仅可观察.使用x86(32位),效果首先发生在4272的深度.Mono(就像在https://repl.it上使用的那样)可以毫无问题地工作到74200的深度.

StackOverflowException不会在深度递归中发生,而是在升级回主程序时发生.finally块被深度处理,然后程序死掉:

Exception System.InvalidOperationException at 105
Finally at 105
...
Exception System.InvalidOperationException at 55
Finally at 55
Exception System.InvalidOperationException at 54
Finally at 54
Process is terminated due to StackOverflowException.
Run Code Online (Sandbox Code Playgroud)

或者在调试器中:

The program '[xxxxx] Test.vshost.exe' has exited with code -2147023895 (0x800703e9).
Run Code Online (Sandbox Code Playgroud)

谁能解释一下这个?

public class Program
{
    private class Test
    {
        private int maxDepth;

        private int …
Run Code Online (Sandbox Code Playgroud)

c#

9
推荐指数
1
解决办法
512
查看次数

标签 统计

c# ×2

multithreading ×2

stack ×2

size ×1