outOfMemoryException

cpfxs 2012-10-11 02:38:43
在类里,定义了一个二维数组

public static int[,] values = new int[100000, 1987];

但是,出现异常,是什么原因呢?

有朋友提示说:“visual studio应该还有其它的限制,例如一个数组最多有多少个成员,或者一个内存块最多能有多大,应该是有限制的,具体是多少就不清楚了。”





请问,这是什么原因呢?

如何解决呢?谢谢
...全文
137 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2012-10-11
  • 打赏
  • 举报
回复
http://www.chinaz.com/program/2008/1124/46386_4.shtml
iyomumx 2012-10-11
  • 打赏
  • 举报
回复
4.5以前,32位和64位.Net程序的单一对象实例大小限制是2G,一个多维数组是一个实例,所以如果数组各维过大就会出错。可以考虑使用交错数组,构建一系列数组对象并放在一个数组的数组中。但仍然需要注意,在32位系统中单个进程能使用的内存限制是4G,而且常常达不到这个数字。
cpfxs 2012-10-11
  • 打赏
  • 举报
回复
内存翻页,可以解决这个问题吗?
cheng2005 2012-10-11
  • 打赏
  • 举报
回复
新手最常犯的错误就是以为世界只有碗口那么大。
请先确认你需要多大,再看机器能给你多大。
dabingsou 2012-10-11
  • 打赏
  • 举报
回复
太大了,你可以分成多个数组存储
Hauk 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 5 楼 的回复:

v.DataSrc.Rows+5等于多少?

我试了一下public static int[,] values = new int[100000, 1987];
不论是定于成全局还是局部我都OK的

C# code

int[,] values = new int[100000, 1987];
for (int i = 0; i < 1……

……
[/Quote]

恩。。200000就不行了。。。
打开任务管理器,在性能那一栏,你可以看到内存空闲多少,那儿到0就报异常了。

把变量定义在方法之外就叫全局变量,我想。。和这个应该没关系的。。。
cpfxs 2012-10-11
  • 打赏
  • 举报
回复
怎么解决啊!帮帮我呀!
cpfxs 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

v.DataSrc.Rows+5等于多少?

我试了一下public static int[,] values = new int[100000, 1987];
不论是定于成全局还是局部我都OK的

C# code

int[,] values = new int[100000, 1987];
for (int i = 0; i < 1……
[/Quote]

那麻烦再试试int[,] values = new int[200000,2000]呢?

那是什么原因造成的呢?

如何定义是全局呢?我刚接触C#不久,不懂内存机制
Hauk 2012-10-11
  • 打赏
  • 举报
回复
v.DataSrc.Rows+5等于多少?

我试了一下public static int[,] values = new int[100000, 1987];
不论是定于成全局还是局部我都OK的


int[,] values = new int[100000, 1987];
for (int i = 0; i < 100000; i++)
{
for (int j = 0; j < 1987; j++)
{
values[i, j] = i + j;
}
}
Console.WriteLine(values[99999,1986]);

代码可以正常执行
cpfxs 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

这东西和你机器的内存大小有关。

如果在操作过程中出现,有可能和你的代码有关死循环之类。。。
[/Quote]

内存4G,没有发生死循环,是定义数组一开始就发生了,

Hauk 2012-10-11
  • 打赏
  • 举报
回复
这东西和你机器的内存大小有关。

如果在操作过程中出现,有可能和你的代码有关死循环之类。。。
cpfxs 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

太大了,声明成全局的可以,但是局部的,没有那么大地方重新给你分配
[/Quote]

如何声明成全局的呢?
bdmh 2012-10-11
  • 打赏
  • 举报
回复
太大了,声明成全局的可以,但是局部的,没有那么大地方重新给你分配

110,602

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧