大量CSV数据读取,如何保证效率

wxylvmnn 2010-02-23 03:54:05
现在读取CSV,客户说最大会出现100万条数据的情况,大小有500M,,,,

结果读取的时候,还没等到对数据进行望数据库内插入时,有的机器出现了内存溢出。

读取的时候的代码如下:
csvFormatString = FileIO.FileSystem.ReadAllText(fileName, Encoding.GetEncoding("SHIFT-JIS"))

作为对应案,
现在只能考虑是循环读取了,
1万件为单位,循环100次来处理这样100万件数据的CSV。
不知道哪位同学 有什么高招能解决这样的问题。

...全文
1341 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-02-24
  • 打赏
  • 举报
回复
引用 5 楼 zhoufoxcn 的回复:
引用 3 楼 wuyazhe 的回复:zgke说的没错,但是,如果有非字符的,转换效率很差的,这样的东西最好用c/c++做,里面的fscanf还是效率比c#快太多了。不是一个数量级的。
汇编还会更快,你为什么不建议使用汇编呢?

一次全部读取太耗内存,一次一行也不可取,可以在二者之间寻求一个平衡,还有在使用StringBuilder等来提高缓冲能力,还有优化算法等,可以从某些程度上提高性能,但是数据量大,不管如何优化总是需要花费一些时间的。



你这话说的,你肯定没实际项目中因为这个,困住过。
这的确是.net的美中不足,汇编,那你怎么不说01算了,你这不抬杠么。
因为如果明文保存的数据含有浮点数,读取速度差的惊人,当时一行一行读速度还是不满足,考虑了c++的scanf的,但最终还是我的项目用了2进制直接存取来提高速度。


楼主考虑的就是效率,我给说个效率方面的提升方法也招惹到你MVP大人了!
luhang112 2010-02-23
  • 打赏
  • 举报
回复
dddddddddddddddddddddddddddddddddddddd
周公 2010-02-23
  • 打赏
  • 举报
回复
引用 3 楼 wuyazhe 的回复:
zgke说的没错,但是,如果有非字符的,转换效率很差的,这样的东西最好用c/c++做,里面的fscanf还是效率比c#快太多了。不是一个数量级的。

汇编还会更快,你为什么不建议使用汇编呢?

一次全部读取太耗内存,一次一行也不可取,可以在二者之间寻求一个平衡,还有在使用StringBuilder等来提高缓冲能力,还有优化算法等,可以从某些程度上提高性能,但是数据量大,不管如何优化总是需要花费一些时间的。
wxylvmnn 2010-02-23
  • 打赏
  • 举报
回复
行,先结贴,谢谢各位热心回帖,这边试下readLine
兔子-顾问 2010-02-23
  • 打赏
  • 举报
回复
zgke说的没错,但是,如果有非字符的,转换效率很差的,这样的东西最好用c/c++做,里面的fscanf还是效率比c#快太多了。不是一个数量级的。
zgke 2010-02-23
  • 打赏
  • 举报
回复
如果数据很打 不建议使用 ReadAllText 使用System.IO.StreamReader().ReadLine(); 进行一行一行的读
品铭工作室 2010-02-23
  • 打赏
  • 举报
回复
基本上都是这样处理的了,问题在于是在一个PC处理,还是多台PC(分布式处理机制)

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧