当前位置:编程学习 > C#/ASP.NET >>

大容量文本文件的查询

根据条件查询文本文件的中的相关内容,文本文件的大小为1G-2G,如何提高速度,不影响电脑的速度。我现在是用StreamReader流逐行读取的。查询过程中电脑出现卡死状态(很慢)。查询完成后才恢复。各位高手有什么好的方法没提高速度没啊!求解!谢谢! --------------------编程问答-------------------- 你看看能不能把文件分块往内存里装 --------------------编程问答-------------------- 放到数据库里面

用正则试试 --------------------编程问答-------------------- --------------------编程问答-------------------- 往内存装也是一样很慢,而且同样占用了内存电脑还是很卡,这个方法我试过了,不行哦。电脑内存是512的。在1G以上的电脑上用不卡。

为了方便使用,在任何地方都能查,所以不能用数据库! --------------------编程问答-------------------- 我意思是从文件中先读出256K的大小..进行比对...完了..清空在读..直到没有... --------------------编程问答-------------------- 那我得出的数据会不会不完整啊。TXT文档中是按照行显示的,数据每次查询都是一整行,每次读出256k,会不会吧数据给截断啊! --------------------编程问答--------------------
引用 6 楼 adivcss13579 的回复:
那我得出的数据会不会不完整啊。TXT文档中是按照行显示的,数据每次查询都是一整行,每次读出256k,会不会吧数据给截断啊!

恩~~是个问题 --------------------编程问答-------------------- 那哪位高手有没有什么更好的办法啊! --------------------编程问答--------------------
引用 6 楼 adivcss13579 的回复:
那我得出的数据会不会不完整啊。TXT文档中是按照行显示的,数据每次查询都是一整行,每次读出256k,会不会吧数据给截断啊!

用文本文件不是好选择 --------------------编程问答--------------------
引用 9 楼 gomoku 的回复:
引用 6 楼 adivcss13579 的回复:

那我得出的数据会不会不完整啊。TXT文档中是按照行显示的,数据每次查询都是一整行,每次读出256k,会不会吧数据给截断啊!

用文本文件不是好选择



这个没办法啊,数据就是放在文本文件中的。还望哪位高手给点意见,帮帮忙啊!谢了! --------------------编程问答-------------------- 你可以第一次取0~256第二次去128~384在字符截断问题上... --------------------编程问答-------------------- 没其他办法,只有分块,多线程的去读 --------------------编程问答-------------------- 分块放到缓存中去读是很快,就是字符串被截断的问题还不能解决! --------------------编程问答-------------------- 可以试试。多开线程分块放入内存。然后并行查询。 --------------------编程问答-------------------- 用内存映射文件,每次只把一部分内容映射到内存中。
自己在内存中检测回车换行符,这样可以保证每行都完整。 --------------------编程问答--------------------
引用 15 楼 pilotedit 的回复:
用内存映射文件,每次只把一部分内容映射到内存中。
自己在内存中检测回车换行符,这样可以保证每行都完整。

这个和分块放到缓存中区读是一样的,放进去的一部分内容肯定会有不完整的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 这种情况只有多线程处理 --------------------编程问答-------------------- 假如你要比对的字符串长是3    总文件的长度是100,;
第一次从s=0开始读到e,第二次读 s=e-3-1  开始到e=e-3-1+e   一直这样读... --------------------编程问答-------------------- 用线程试试~ --------------------编程问答-------------------- 多线程,分块查询。合理利用资源,减轻单词查询负担。 --------------------编程问答-------------------- 只能考虑多线程处理了 ,都在主线程那么大个文档不卡才怪 --------------------编程问答-------------------- 不要逐行读取,而要5M一次5M一次的读取! 当然直接5M读取会有问题的,可能会读取半个字的情况
所以你5M读取出来后,最后的字节需要处理一下,如果读了半个字,那半个字就跟下次读取的内容合并。 --------------------编程问答-------------------- 多线程 分块读 再不行就加硬件配置 --------------------编程问答-------------------- 楼主 你可以 多开一个线程  折半 前后同时查找 --------------------编程问答-------------------- 编码是很费时间的,所以
2的倍数读取。。。而且别转换编码。。。以二进制的形式进行比较你要查找的内容 --------------------编程问答-------------------- 交给后台慢慢处理就好了  --------------------编程问答--------------------
引用 18 楼 isline 的回复:
这种情况只有多线程处理


+考虑一个去读效率最高的算法. --------------------编程问答--------------------  学习 学习  期待更好的解决方法 --------------------编程问答-------------------- 多线程和分块都很耗内存,我都试过了,求更好的解决办法! --------------------编程问答--------------------
引用 16 楼 adivcss13579 的回复:
引用 15 楼 pilotedit 的回复:
用内存映射文件,每次只把一部分内容映射到内存中。
自己在内存中检测回车换行符,这样可以保证每行都完整。

这个和分块放到缓存中区读是一样的,放进去的一部分内容肯定会有不完整的。

这个完全可以自己在程序里处理。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,