问题描述
文件夹目录F:files下有N多个子目录,每个子目录下有多个文件,文件数量达上几百万个。请问用什么方法能快速把这些文件内容读出来并插入数据库?希望朋友能给出代码
解决方案
本帖最后由 nick10086 于 2011-06-12 01:45:47 编辑
解决方案二:
不建议多线程,因为磁盘上的文件并发读取越多,磁盘寻道越频繁,导致性能反而下降。我们都有这样的经验,复制2个1GB的文件,一个一个拷贝和两个一起拷贝,后者的时间远远大于前者。建议使用一个BackgroundWorker来访问文件,并且在界面用进度条让用户耐心等待。
解决方案三:
可以开多线程读取,不过应该根据当前的机器性能适量开启,3-5个另外多线程读取一定做好目录结构的判断,千万别乱了.
解决方案四:
启用多线程的目的要搞清楚,就是你整个系统的瓶颈在于你程序的执行能力上,这时你开多个线程可以提升程序的执行能力,多线程才有效。如果瓶颈在其他地方,多线程的效果并不明显,反而会增加你代码中维护多线程操作同一个目标的开销,比如lz你的这个应用,我感觉可能瓶颈会出现在磁盘读写和文件的查询上,开多线程的效果不一定很明显。这里面分了三个部分,如果非要开多线程的话,需要考虑这三者之间的协同工作:1.获取所有文件的全路径文件名。2.读取文件。3.写入数据库。
解决方案五:
使用并行计算,参考http://hi.baidu.com/%CE%DE%B7%E7%CC%FD%BA%A3/blog/item/31e5dd8ad9f873defc1f1070.html
解决方案六:
看你的cpu数量和机器性能了,一个cpu,线程只是解决假死问题,达不到提高速度的效果再有就是读取文件内容,用内存映射,特别是对于大文件,最好的选择
解决方案七:
路过,学习顶
解决方案八:
完成端口能帮到你
解决方案九:
除了界面主线程外。开一个读文件的线程。一个写数据库的线程就足够了。读文件的线程把数据读完后把数据直接交给写数据库的线程去做数据处理。然后自己再去读一下文件。考略到读和写速度的问题。你可以读和写开相应的线程。
解决方案十:
bdmh谢谢内存映射读写文件有看头,查了一下资料感觉很不错,还有没有其它更好的方法呢?