![]() |
1
4
创建一个准确表示/镜像CSV文件的类。然后将所有内容读入该类的列表中。以下snip来自CsvHelper的文档。
重要的部分是.ToList(),因为这将强制将所有数据加载到列表中,而不是在访问时生成结果。 然后,您可以对该列表执行额外的映射/提取,该列表将存储在内存中。 |
![]() |
2
1
找到真正的性能瓶颈:从磁盘读取文件内容的时间,将CSV解析到字段的时间,还是处理记录的时间?10MB的文件看起来非常小。我正在用定制的csv阅读器处理250MB以上的csv文件集,没有任何投诉。
如果有许多文件要解析,可以在不同的任务中处理每个文件,并使用异步方法最大限度地提高吞吐量。如果它们都来自同一个物理磁盘,那么您的差异将有所不同,甚至可能比单线程方法更糟糕。 更高级: 如果您知道文件只包含8位字符,那么可以对字节数组进行操作,并跳过StreamReader开销,将字节转换为字符。通过这种方式,您可以在一次调用中将整个文件读入字节数组,并在不需要支持换行转义的情况下扫描换行。在这种情况下,可以由多个线程扫描换行符,每个线程都查看字节数组的一部分。 如果您不需要支持字段转义(a,“b,c”,d),那么您可以编写一个更快的解析器,只需查找字段分隔符(通常是逗号)。如果这是一个瓶颈,您还可以将字段划分解析和字段内容解析拆分为线程,尽管内存访问局部性可能会抵消任何好处。 在某些情况下,您可能不需要将字段解析为中间数据结构(例如双精度、字符串),可以直接处理对字段开始/结束的引用,并节省一些中间数据结构的创建。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |