2010-07-26 80 views
1

我有一个应用程序从数据库中提取数据并将其存储在内存中供以后使用。 我测试过这个应用程序大约7000个数据行,但是当我想要使用它10000或更多时,我遇到了StackOverflow异常。这太奇怪了,因为我认为如果我的数据太大,我应该得到OutOfMemory,而不是Stackoverflow。非递归上下文中的stackoverflow异常

+4

你能发表一些代码吗? – 2010-07-26 23:43:48

+0

你能发布一些代码和异常时的堆栈跟踪吗? – 2010-07-26 23:44:04

+0

用于询问堆栈溢出时堆栈溢出的+1(邮政编码!) – Hogan 2010-07-26 23:45:03

回答

2

你当然是对的。获得一个堆栈溢出在C/C++代码是很容易做到:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char buffer[4 * 1024 * 1024]; 
    return 0; 
} 

4,以确保它在64位模式下吹也。但是数组是托管代码中的引用类型。他们被分配在堆上,而不是堆栈中。在C#代码中,您将不得不分配值类型作为本地变量来吞噬堆栈空间。而唯一有资格让你随身携带的值类型类型就是一个结构体。这就是,你必须声明一个有25万个成员的结构。获得其中一种的唯一可能方式是从某种工具和巨大的dbase方案自动生成的结构。

这只是不会发生。问题确实存在于您的dbase提供商中。总是用C或C++编写。做一些令人讨厌的事情,比如使用_alloca()来打击堆栈。 C#中的“stackalloc”关键字。我会避免提到带有/ stack参数的editbin.exe实用程序来增加主线程堆栈的大小,你不应该用这个。

与您的数据库提供商交谈。