c#操作大的文本文件

来源:百度知道 编辑:UC知道 时间:2024/06/17 05:22:19
有1个100多M的文本文件,需要对每行的格式处理一下,然后写到另一个文件中;
现在的方法就在读一行,然后处理,处理完后再把数据写到另一个文件中,发现要10多分钟,不知道有什么快点的方法。
刚才有个不必要的操作浪费了些时间,现在需要5分钟,因该还能快吧;处理很简单,就是调一下格式。
一下子读到数组里太耗内存吧;
“ 蒲仕龙”的分治方法怎么用?
“iampaipaipai ”一次读一块的话,要判断最后是否一整行,没有的话下次读还要拼接吧

不如先全部读入到一个数组里,统一处理,处理完后一次写入
这样可以减少文件读写操作次数
最好新开一个线程在后台做这些操作,这样不会影响到前台界面等一些其他操作,可以从后台线程返回一个进度用来监视。

100M的东西处理速度不会很快,就单复制一个100M的文件都不会闪电一般,何况你还要处理,取决于机器性能吧

补充:
分治方法就是分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。
分治法解题的一般步骤:
(1)分解,将要解决的问题划分成若干规模较小的同类问题;
(2)求解,当子问题划分得足够小时,用较简单的方法解决;
(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。
当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。

对于你说的害怕吃内存现象,我认为如果用读写内存和读写硬盘来比,读写内存肯定要比读写硬盘快,减少硬盘的读写次数是提速的关键,PHOTOSHOP处理几个高分辨率图片也要吃掉个七八十兆,现在的电脑内存都在1G以上。

只有分治方法还可以解决了

你一次性读写一大块数据试一试,直接用字节流读byte,然后自己将byte解码成字符串再处理

用流是最快的了。你可以多开几个线程,同时读这样速度就能成倍提高。不过为了不重复读需要做些对齐的处理。

另外你也可以用预读的方式,用一个后台线程周期性低效更新此文件

如果你把文本保存为二进制或者自己放到像sqlite或db4o这样的嵌入式数据库也能提高效率,还可以和1、2结合