【发布时间】:2017-07-08 18:09:06
【问题描述】:
我正在与大型阵列的问题作斗争。我需要阅读大量 csv 文件并使用它们(制作表格并保存它们)。我是这样试试的
String[,,] pole = new string[5000, 10251, 100];
...
String[] proz = File.ReadAllText("@/../../History/201" + r + "-" + m1 + m2 + "-" + d1 + d2 + "_00/variables_ens.csv").Split(';');
for (int k = 0; k < 10251; k++)
{
int l = k / 99;
int lk = l * 99;
int b = k - lk;
pole[n, l, b] = proz[k];
}
但在第一行
String[,,] pole = new string[5000, 10251, 100];
它说超出范围异常,但我确实需要那么多空间。当我写
String[,,] pole = new string[100, 10251, 100];
它有效,但仅适用于其中的数百个文件。 有什么建议吗?
【问题讨论】:
-
您可以使用 List 而不是数组,它更灵活。您应该不需要它,不是每个 CSV 都具有相同数量的内容。所以列表可以增长并且没有硬编码的索引范围。
-
好吧,如果你说的是“IndexOutOfRangeException”中的情况,那不是大小问题,你访问的是不存在的元素,因此你应该使用动态数据结构,也许是 List
-
将您的项目重建为 x64,然后重试。如果这不起作用,请获取更多内存。
-
n变量从何而来?在您尝试使用它来索引您的数组之前,它不会出现在您的代码中的任何位置。由于更改数组的第一个维度会使错误消失,因此您使用n的方式很可能是问题的根源,而您没有向我们提供任何相关信息。 -
另外请注意,尺寸为 5000、10251、100 的数组在完全为空时会占用 20 GB 的内存。我认为你需要想出一个更好的策略来解决这个问题。
标签: c# arrays indexoutofrangeexception large-data