【问题标题】:Define stack size in a parallel for loop C#在并行 for 循环 C# 中定义堆栈大小
【发布时间】:2015-10-23 08:02:22
【问题描述】:

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

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

但是,是否可以使用 Parallel.For 来做到这一点?还是我必须编写所有线程,指定它们的堆栈大小?

【问题讨论】:

标签: c# parallel-processing stack-overflow


【解决方案1】:

来自social.msdn

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

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

editbin /stack:2097152 myprogram.exe

希望有帮助!

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2021-08-15
    • 2011-02-23
    • 2017-03-02
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多