c#读取文本文件,有几万行数据,读出来然后存到数据库,怎么提高读取效率和存储效率

如题所述

思路:
可以用流来读取,并且每次读取二十条数据,存入缓存中buff,然后把这二十条数据清空,再读后面的数据以此类推,读完之后把缓存中的数据,一并写入到数据库中,你也可以在读取的时候把数据设大一点追问

我用的entity framework插入数据库,前面几千条几秒就好了,越后面越慢

追答

没用过这个,我读数据都是用流读的

追问

我也是用流读,今天读取一个TXT文档,开始几千条很快,不过越后面读取越慢啊

追答

你是也是先读到缓存中然后才存到数据库的吧

追问

我是用readline一行一行读,然后把每行split分成几部分,每行是一条数据插入数据库中,几万条用了几十分钟

追答

我推荐的是就是把数据读取到缓存中然后再存到数据库
原因:缓存的目的是为了避免重复计算,特别是对一些比较耗时间、资源的计算,也可以减少HTTP访问
工作原理:
硬盘把数据调到硬盘缓存,内存从硬盘缓存读数据,然后传输到cpu的缓存,cpu从多级缓存中读数据,内存就是一个数据中转站,因为cpu读取速度远远大于硬盘,内存的速度是很快的,通过内存这个桥梁来提高cpu读取数据的速度!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-13
如果是sql server的话,用file.readallline一次读入所有行,然后读取数据库目标表的结构到datatable里,然后循环将读入的行装入这个datatable,用sqlbulkcopy复制到目标表上去。追问

循环几万次很费时间啊

追答

你先试一下速度,如果确实读取速度很慢(其实我感觉几万行应该还好),那就要试多线程了,也就是同时开几个线程,每个线程读取一部分行(比如第一个线程处理0-5000,第二个为5001-6000,这只是举例,具体开几个线程要视具体情况),存到各自的比如List里,完成之后再将这些list添加到Datatable里。

追问

我已经解决啦

本回答被网友采纳
第2个回答  2014-03-13
可以提供你的代码看看么 尤其是读取数据和插入数据那块
也许对内存的控制有问题 否则不会越来越慢
几万行说多也不多 应该不至于特别慢