我有一个应用程序从数据库中提取数据并将其存储在内存中供以后使用。 我已经为大约7000个数据行测试了这个应用程序,但是当我想将它用于10000或更多时,我遇到了StackOverflow异常。这太奇怪了,因为我认为如果我的数据太大,我应该得到OutOfMemory,而不是Stackoverflow。
答案 0 :(得分:2)
你是对的。在C / C ++代码中获取堆栈溢出非常容易:
int _tmain(int argc, _TCHAR* argv[])
{
char buffer[4 * 1024 * 1024];
return 0;
}
4确保它也能在64位模式下爆炸。但是数组是托管代码中的引用类型。它们在堆上分配,而不是堆栈。在C#代码中,您必须将值类型分配为局部变量以吞噬堆栈空间。并且唯一有资格在任何地方使用它的值类型类型是结构。那是 hard ,你必须声明一个拥有25万成员,给予或接受的结构。获得其中之一的唯一可能方法是使用某种工具和巨大的dbase方案自动生成的结构。
这不会发生。当然问题出在您的dbase提供商中。总是用C或C ++编写。并做一些令人讨厌的事情,比如使用_alloca()来炸毁堆栈。 C#中的“stackalloc”关键字。我将避免使用带有/ stack参数的editbin.exe实用程序来增加主线程堆栈的大小,你不应该为此而烦恼。
与您的dbase提供商提供商联系。