【发布时间】:2021-12-02 01:00:37
【问题描述】:
我有一个 5000 行 * 30 列的 Excel 工作表,我想将它们读入 C# 程序,然后通过查找行标题和列标题定期访问这些值。该程序将在普通笔记本电脑(16GB 内存)上运行。我应该使用字典词典来存储这些数据吗?如果是这样,是否更建议创建一个包含 5000 个较小字典的字典,每个字典具有 30 个键值对(即,行标题将是“外部”字典的键,列标题将是“内部”字典的键字典)还是 30 个字典,每个字典有 5000 个键值对?或者我应该创建一个二维数组,并将行标题和行索引对以及列标题和列索引对存储在 2 个较小的字典中?还是我需要担心这么多数据的内存/性能问题?
谢谢。
【问题讨论】:
-
您应该创建一个
Model类,其中 Properties 将是您的 30 列,其值将是 5000 行中的值。因此,您将只有一个List<Model>,其中包含 5000 个模型项。 -
5000 行对于现代计算机来说没什么,即使行很大。
-
如果您在 Excel 电子表格中对数据进行建模(不包括合并单元格或其他 非矩形 功能),并且您将通过行和列访问它们数字,那么您就有了 2D 数组的完美用例。再说一次,这个问题是基于意见的,可能很快就会结束(Stackoverflow 对意见过敏)
-
字典是二进制散列,项目数为 Log(N)。如果您查找 30 个字典,则查找将是 30/2*(log(N/30) 并且您必须与 Log(N) 进行比较才能看到差异。直接列表中的查找是 N/2,这是平均值找到该项目之前的测试量。
标签: c# arrays performance dictionary memory