c# - 如何在 C# 中增加堆栈大小? 1MB 不够。我有 32GB 可用内存

标签 c# recursion stack-overflow

<分区>

我在 bmp 中有以下用于“blob 填充”的代码。但是,它在循环 7201 或类似的地方耗尽了堆栈上的内存。我如何增加内存?我听说堆栈大小是 1MB,太小了!我有 32GB 内存,我想充分利用它。递归似乎是继续这样的算法的方式,如果我的堆栈不是太小的话。 (这是一个四向递归;每个函数调用都会生成四个相同的函数调用)

public HashSet<int> evalpxls = new HashSet<int>();

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 "";
        }

最佳答案

如果您不介意创建一个线程并在另一个线程上执行此操作(并不是说您需要异步完成它,只需将该代码放在另一个线程中,启动它并立即加入)那么您可以创建一个线程一个构造函数,用于指定堆栈大小并在那里运行您的代码。

关于c# - 如何在 C# 中增加堆栈大小? 1MB 不够。我有 32GB 可用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31823477/

相关文章:

java - Android Firebase 实时异常 java.lang.StackOverflowError : stack size 8MB

java - Java 中的 StackOverflowError - 递归

stack-overflow - Elixir无限递归是否曾经使堆栈溢出?

c# - 在 Azure 中使用 SendGrid 创建 Outlook 日历邀请(C#、.NET)

Javascript 回调函数和递归

Javascript:按顺序遍历递归混淆的二叉搜索树

c - 空函数C递归

c# - 在 Winform C# 中单击按钮打开标签页

javascript - 在 asp.net mvc 中提交 Ajax.BeginForm 后 jQuery 代码无法正常工作

带非托管 C++ Unicode DLL 链接到非托管 C++ ANSI DLL 的 C# EXE 崩溃