【问题标题】:In C# How to estimate the maximum stack size when constructing Thread?在 C# 中如何估计构造线程时的最大堆栈大小?
【发布时间】:2020-03-10 06:51:02
【问题描述】:

在C#中创建一个Thread,构造函数有一个参数maxStackSize,我不知道它的值应该有多大,应该如何估计maxStackSize的值? 这样的构造函数:public Thread(System.Threading.ThreadStart start, int maxStackSize);

【问题讨论】:

  • 不要这样做。使用现代 C# 理念,如线程池和任务。如今,手动创建线程的理由很少。
  • 最大堆栈大小参数是可选的,所以除非你有很好的理由限制它,否则请忽略它并让系统处理它。
  • @Neil 感谢您的洞察力,我会听从您的建议。
  • @Skizz 谢谢,这是个好主意。

标签: c# memory-management stack


【解决方案1】:

堆栈的默认值为 1MB,几乎没有理由让它变大。例如,如果您必须进行非常深的递归,则可能需要更大的堆栈。但是,4MB(可能的最大大小)可能也无济于事,您最好看看不同的算法。

定义堆栈的想法主要是定义大小小于小于1MB。由于堆栈必须在物理内存中分配,当线程运行时,如果您知道您的代码很小并且没有递归或深度调用,您可以指定较小的堆栈大小。

一般来说,使用默认堆栈大小即可。

编辑:NET CLR(从 4.0 开始)提交内存中的全部 1MB。在仅提交 100K 时,期望这些就足够了;但是,它确实保留了 1MB 的虚拟地址空间。

【讨论】:

  • 非常感谢您的深入解释。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2020-11-05
  • 2010-12-17
  • 2011-07-27
  • 2015-02-13
  • 2010-12-22
  • 2010-09-15
相关资源
最近更新 更多