在 C# 中创建大型(巨大)数组

Large (huge) array creating in C#

我正在与大数组的问题作斗争。我需要阅读大量的 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];

它说超出范围异常,但我确实需要那么多 space。当我写

String[,,] pole = new string[100, 10251, 100];

它有效,但仅适用于其中的一百个文件。 有什么建议吗?

嗯,我认为你需要重新考虑你的整个策略并实施流媒体 IEnumerable<T>File.ReadLines

我没有足够的元素来完全理解你试图通过你当前的实现来实现什么,但我很确定你试图操作的数据量太大了在内存中处理。

你需要做什么?你在操纵什么数据? 5000 个文件,每个文件 1025100 行?每个文件都有相同的大小?您真的、真的需要一次加载所有内容吗?

这个问题的答案应该能为您指明正确的方向。我会说您需要使用流式处理以更易于管理的形式(如数据库)有效地加载数据。

在您的语句中,您声明了一个包含 5000 * 10251 * 100 个元素的数组。这是 5,125,500,000 个元素,这是一个超出单个块内存分配范围的数字(至少在 32 位系统中)。您可以将数据拆分为 2 个或 3 个不同的数组,也可以使用动态分配结构,如 List<>。