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



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

以并行方式训练所有树。然而,For循环会导致堆栈溢出。我知道堆栈大小可以在使用new Thread()时配置,如中所述:如何更改.NET程序的堆栈大小?

然而,是否有可能使用Parallel。用的?或者我必须写我所有的线程,指定他们的堆栈的大小?

From social.msdn:

默认情况下,TPL使用来自CLR ThreadPool的线程。堆栈大小为线程池线程的默认堆栈大小,即由包含进程入口点的可执行文件决定。

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

editbin/stack:2097152 myprogram.exe

希望有帮助!

最新更新