我只是在我的Windows应用程序项目中写两行
double[] results = new double[100000000];
double[] results1 = new double[100000000];
Run Code Online (Sandbox Code Playgroud)
在第二行(results1)我得到了异常'System.OutOfMemoryException'被抛出.
好吧,我的系统配置是
RAM- 4 GB
操作系统 - Windows 7
处理器 - 两核2.93 Ghz的英特尔核心
我该如何解决此错误以及发生此错误的原因
好的,因为大部分答案都是针对通用列表的
List<int> results1 = new List<int>();
List<int> results2 = new List<int>();
for (int i = 0; i <= 100000000; i++)
{
results1.Add(i);
results2.Add(i);
}
Run Code Online (Sandbox Code Playgroud)
我也在这里得到同样的错误
创建数组时,内存分配器将尝试保留分配点所需的总内存量.在这种情况下,每个元素将为8个字节.在这种情况下,OOM非常简单,没有足够的内存来分配这样的大型数组.在标准的32位Windows配置中,对于用户代码和数据,每个进程最多只能有2GB的内存地址空间,但实际上由于内存碎片,它通常比这少得多.在碎片化的情况下,在处理大型数组时,OOM被更好地解释为"找不到足够大的连续内存部分".
你不应该分配那些不适合内存的大型数组.只需使用列表并根据需要添加元素:
var results = new List<double>();
Run Code Online (Sandbox Code Playgroud)
从文档中引用:
int[] array = new int[5];
Run Code Online (Sandbox Code Playgroud)
该数组包含从array [0]到array [4]的元素.new运算符用于创建数组并将数组元素初始化为其默认值.在此示例中,所有数组元素都初始化为零
所以你需要有足够的内存来保存这些默认值.
这是一个800MB阵列,您正试图加载到win32进程空间(2GB).它也需要连续,这使得它更难.简单来说 - 它在LOH中找不到一个足够大的连续块,以便将所有这些整合在一个大块中.
三种选择:
double[][]用10000个内阵列的每个长度10000 -只是做一些/和%代码进入右块| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |