8
スタックサイズがデフォルトの50倍のスレッドを作成する際の危険は何ですか?
私は現在、非常にパフォーマンスが重要なプログラムに取り組んでいます。リソースの消費を減らすのに役立つ可能性があると考える1つのパスは、ワーカースレッドのスタックサイズを増やして、アクセスするほとんどのデータ(float[]s)を移動できるようにしましたスタック(を使用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