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

C# 在并行循环C中定义堆栈大小#,c#,parallel-processing,stack-overflow,C#,Parallel Processing,Stack Overflow,我正在实现一个随机森林算法。每个树都以递归的方式进行训练(随着树的加深,调用堆栈的大小会增加),我可以毫无问题地训练一棵树(或者在顺序循环中训练几棵树) 并行训练所有树。然而,For循环会导致堆栈溢出。我知道可以在使用new Thread()时配置堆栈大小,如中所述: 但是,有没有可能用Parallel.For来实现呢?或者我必须写入所有线程,指定其堆栈的大小吗?来自: 默认情况下,TPL使用CLR线程池中的线程。堆栈大小 对于线程池线程,是进程的默认堆栈大小,即 由包含进程入口点的可执行文件确

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

并行训练所有树。然而,For循环会导致堆栈溢出。我知道可以在使用new Thread()时配置堆栈大小,如中所述:

但是,有没有可能用Parallel.For来实现呢?或者我必须写入所有线程,指定其堆栈的大小吗?

来自:

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

您可以通过编辑此项更改进程的默认堆栈大小 在可执行文件中设置。一种方法是使用“editbin.exe” 随虚拟工作室一起提供。如果您的可执行文件是 “myprogram.exe”并且您想要2MB堆栈,您可以运行:

editbin/stack:2097152 myprogram.exe

希望有帮助

发件人:

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

您可以通过编辑此项更改进程的默认堆栈大小 在可执行文件中设置。一种方法是使用“editbin.exe” 随虚拟工作室一起提供。如果您的可执行文件是 “myprogram.exe”并且您想要2MB堆栈,您可以运行:

editbin/stack:2097152 myprogram.exe

希望有帮助


考虑使用<代码>堆栈并将该方法重写为迭代。@ BAS,请您具体一点(或发送链接)?考虑使用<代码>堆栈 >并将该方法重写为迭代。@ BAS,请您具体一点(或发送链接)好吗?