在并行for循环C#中定义堆栈大小

时间:2015-07-31 15:12:32

标签: c# parallel-processing stack-overflow

我正在实施随机森林算法。每个树都以递归方式进行训练(随着树越来越深,增加了调用堆栈的大小),我可以毫无问题地训练一棵树(或者顺序循环中的几棵树)。

训练Parallel.For循环中的所有树会导致堆栈溢出。我知道在使用新的Thread()时可以配置堆栈大小,如:How to change stack size for a .NET program?

中所述

然而,是否可以使用Parallel.For来做到这一点?或者我是否必须编写所有线程,指定其堆栈的大小?

1 个答案:

答案 0 :(得分:0)

来自social.msdn

  

默认情况下,TPL使用来自CLR ThreadPool的线程。堆栈大小   对于ThreadPool线程来说,过程是'默认堆栈大小,即   由包含进程入口点的可执行文件确定。

     

您可以通过编辑来更改进程的默认堆栈大小   在可执行文件中设置。一种方法是使用" editbin.exe,"   配有Vistual Studio。如果你的可执行文件   " myprogram.exe"你想要一个2MB的堆栈,你可以运行:

     

editbin / stack:2097152 myprogram.exe

     

希望有所帮助!