And*_*ich 49
在某些文档识别期间,我增加了堆栈大小.真的需要它.
因此,您可以使用以下代码增加线程的堆栈大小:
var stackSize = 10000000;
Thread thread = new Thread(new ThreadStart(BigRecursion), stackSize);
Run Code Online (Sandbox Code Playgroud)
Thread(ThreadStart,Int32) - 初始化Thread类的新实例,指定线程的最大堆栈大小.
希望这是你需要的.
Jon*_*ood 21
我想你在这里冒着问题.很难准确确定递归算法将使用多少堆栈.并且,如果你对某些问题是否有足够的问题,我会寻找另一种方法.
大多数递归算法都可以重写为不递归.然后,您可以根据需要分配尽可能多的内存,如果还不够,甚至可以优雅地恢复.
默认堆栈大小存储在PE头中.
如果你自己生成线程,Thread会有一个构造函数,它将堆栈大小作为参数.
但是,对于大多数任务,默认的.NET堆栈大小应该足够1 MB,因此在更改之前,您至少应该检查该任务.
即使您设法获得更大的递归深度,仅出于性能原因,我也会在不使用递归的情况下实现此算法。方法调用比 while 循环中的迭代更昂贵。我强烈建议不要实现任何需要摆弄默认堆栈大小的东西。
我偶尔会使用递归,但仅当调用深度定义为低(如小于 100)时。在创建商业软件时,使用具有无限迭代次数的递归算法是完全不专业的,并且可能会给您带来非常愤怒的客户。
归档时间: |
|
查看次数: |
25352 次 |
最近记录: |