我正在实施随机森林算法。每个树都以递归方式进行训练(随着树越来越深,增加了调用堆栈的大小),我可以毫无问题地训练一棵树(或者顺序循环中的几棵树)。
训练Parallel.For循环中的所有树会导致堆栈溢出。我知道在使用新的Thread()时可以配置堆栈大小,如:How to change stack size for a .NET program?
中所述然而,是否可以使用Parallel.For来做到这一点?或者我是否必须编写所有线程,指定其堆栈的大小?
答案 0 :(得分:0)
来自social.msdn:
默认情况下,TPL使用来自CLR ThreadPool的线程。堆栈大小 对于ThreadPool线程来说,过程是'默认堆栈大小,即 由包含进程入口点的可执行文件确定。
您可以通过编辑来更改进程的默认堆栈大小 在可执行文件中设置。一种方法是使用" editbin.exe," 配有Vistual Studio。如果你的可执行文件 " myprogram.exe"你想要一个2MB的堆栈,你可以运行:
editbin / stack:2097152 myprogram.exe
希望有所帮助!