8
创建堆栈大小为默认值的50倍的线程有什么危险?
我目前正在开发一个性能非常关键的程序,因此决定探索一条可能有助于减少资源消耗的方法,这是增加工作线程的堆栈大小,以便我可以将要访问的大部分数据float[]移至堆栈(使用stackalloc)。 我已经读到,线程的默认堆栈大小是1 MB,因此,要移动我float[]的所有内存,我必须将堆栈扩展大约50倍(到50 MB〜)。 我了解这通常被认为是“不安全的”并且不建议这样做,但是在将当前代码与此方法进行基准比较之后,我发现处理速度提高了530%!因此,我不能在没有进一步调查的情况下简单地通过该选项,这使我提出了问题。将堆栈增加到如此大的尺寸有什么危险(可能会出问题),我应采取什么预防措施以最小化此类危险? 我的测试代码 public static unsafe void TestMethod1() { float* samples = stackalloc float[12500000]; for (var ii = 0; ii < 12500000; ii++) { samples[ii] = 32768; } } public static void TestMethod2() { var samples = new float[12500000]; for (var i = 0; i < 12500000; …
228
c#
.net
memory
stack-memory