.net 非递归上下文中的堆栈溢出异常

.net 非递归上下文中的堆栈溢出异常,.net,stack-overflow,.net,Stack Overflow,我有一个应用程序,它从数据库中获取数据,并将其存储在内存中供以后使用。 我已经对这个应用程序测试了大约7000个数据行,但是当我想使用它处理10000个或更多数据行时,我遇到了StackOverflow异常。这太奇怪了,因为我认为我应该离开内存,而不是在数据太大时堆栈溢出。你当然是对的。在C/C++代码中获得堆栈溢出非常容易: int _tmain(int argc, _TCHAR* argv[]) { char buffer[4 * 1024 * 1024]; return 0

我有一个应用程序,它从数据库中获取数据,并将其存储在内存中供以后使用。
我已经对这个应用程序测试了大约7000个数据行,但是当我想使用它处理10000个或更多数据行时,我遇到了StackOverflow异常。这太奇怪了,因为我认为我应该离开内存,而不是在数据太大时堆栈溢出。

你当然是对的。在C/C++代码中获得堆栈溢出非常容易:

int _tmain(int argc, _TCHAR* argv[])
{
    char buffer[4 * 1024 * 1024];
    return 0;
}
4,以确保它也在64位模式下运行。但是数组是托管代码中的引用类型。它们是在堆上分配的,而不是在堆栈上。在C#代码中,必须分配一个值类型作为局部变量,以占用堆栈空间。唯一有资格让你在任何地方使用它的值类型是一个struct。这很难,你必须声明一个拥有25万成员的结构,不管是给予还是索取。获取其中一个的唯一可能方法是使用某种工具和大型数据库方案自动生成结构

那根本不会发生。问题肯定出在您的数据库提供程序中。用C或C++编写。还做了一些肮脏的事情,比如用_alloca()炸烟囱。C#中的“stackalloc”关键字。我将避免提及带有/stack参数的editbin.exe实用程序,以增加主线程堆栈的大小,您不必对此进行蒙混过关


请与您的数据库提供程序联系。

您能在发生异常时发布一些代码和堆栈跟踪吗?+1询问堆栈溢出时的堆栈溢出(post code!)