作者:allmon白_980 | 来源:互联网 | 2023-09-18 18:13
参见英文答案Howtochangestacksizefora.NETprogram? 4个我在bmp中有“b
参见英文答案 > How to change stack size for a .NET program? 4个
我在bmp中有“blob filling”的以下代码.然而,它在循环7201处的堆栈上耗尽了一些内存或一些这样的内存.如何增加记忆?我听说堆栈大小是1MB,这是太小了!我有32GB Ram,我想充分利用它.如果只有我的堆栈不是太小,递归似乎就像这样的算法. (这是一个四向递归;每个函数调用生成四个相同的函数调用)
public HashSet evalpxls = new HashSet();
public String addLikePixels(int r, int c, Byte A, Byte R, Byte G, Byte B, Bitmap bmp)
{
reclvl++;
dl("Try r:" + r+ " c:" + c + " reclvl:"+reclvl);
if (evalpxls.Contains(hash(r,c)) || r>=bmp.Height || c>=bmp.Width || r<0 || c<0) return "";
evalpxls.Add(hash(r, c));
var p = bmp.GetPixel(c, r);
String curpix = "[" + r + "," + c +"]";
if (p.A == A && p.B == B && p.G == G && p.R == R) //if same color as main color
{
return curpix + addLikePixels(r + 1, c, A, R, G, B, bmp) + addLikePixels(r, c + 1, A, R, G, B, bmp) + addLikePixels(r - 1, c, A, R, G, B, bmp) + addLikePixels(r, c - 1, A, R, G, B, bmp);
}
else //if different color
return "";
}
解决方法:
如果您不介意创建一个线程并在另一个线程上执行此操作(不是您需要异步完成它,只需将该代码放在另一个线程中,启动它并立即加入)然后您可以创建一个带有构造函数的线程指定堆栈大小并在那里运行代码.