올바른 방법은 오버플로를 수정하는 것이지만 ....
자신에게 더 큰 스택을 줄 수 있습니다.
using System.Threading;
Thread T = new Thread(threadDelegate, stackSizeInBytes);
T.Start();
System.Diagnostics.StackTrace FrameCount 속성을 사용하여 사용한 프레임 수를 계산하고 프레임 제한에 도달하면 고유 한 예외를 throw 할 수 있습니다.
또는 남은 스택의 크기를 계산하고 임계 값 아래로 떨어질 때 자체 예외를 throw 할 수 있습니다.
class Program
{
static int n;
static int topOfStack;
const int stackSize = 1000000; // Default?
// The func is 76 bytes, but we need space to unwind the exception.
const int spaceRequired = 18*1024;
unsafe static void Main(string[] args)
{
int var;
topOfStack = (int)&var;
n=0;
recurse();
}
unsafe static void recurse()
{
int remaining;
remaining = stackSize - (topOfStack - (int)&remaining);
if (remaining < spaceRequired)
throw new Exception("Cheese");
n++;
recurse();
}
}
치즈 만 잡으세요. ;)