首页 新闻 会员 周边 捐助

急求答案 。。。高手进。。、。、关于文件查找替换的效率问题。。

-1
悬赏园豆:100 [已解决问题] 解决于 2010-11-22 11:30

项目需要,我写了个程序。

逻辑很简单。 有15000个不同的字符串、、

要去大概4000个文件中去匹配。。替换成固定编码格式。。。

1个字符串。进去。运行1个文件替换。需要0.005秒。。最普通的代码写法。。读出。修改。写入。

这样循环替换完4000个。。需要20秒一次。。。(4000个文件其实只有一两个是有那个字符串的。。但你不知道哪两个)

但是。。这样的过程需要15000次。。因为有15000个不同的字符串在等着。。。

这样我计算了下。。。需要3.4天的样子。。我挂在了服务器上运行。。但还是等不及。。 急求高手解决此问题。。

for (int m = 0; m < files.Count; m++)//files.Count有四千。。、

{ try

{ StreamReader sr = new StreamReader(files[m].ToString(), Encoding.GetEncoding("utf-8"));

string str = sr.ReadToEnd(); sr.Close(); //替换文本

 if (str.Contains(oldCon))

{ str = str.Replace(oldCon, newCon); have = true; } //更改保存文本

StreamWriter sw = new StreamWriter(files[m].ToString(), false);

sw.WriteLine(str); sw.Close(); }

catch { continue;//某文件如有问题。继续。。文件列表已经过处理。不会有问题。。、 } }

leoD的主页 leoD | 初学一级 | 园豆:0
提问于:2010-11-19 14:03
< >
分享
最佳答案
0

4000个文件的大小是多少?可以考虑加内存里,或者分几批加入内存。先读所有文件到HashTable里,并对应各文件名或其它防止重复,替换字段串在内存中保存,完事后再保存,但是要防止数据丢失。

也可以用多线程,开N个线程去处理这些操作。

收获园豆:100
Astar | 高人七级 |园豆:40805 | 2010-11-19 14:30
线程很快。但不稳定,老是出现内存溢出问题。研究中。。 hashtable的用法。很稳定。速度也不慢。。就是遍历修改问题有点别扭。。
leoD | 园豆:0 (初学一级) | 2010-11-22 11:30
其他回答(2)
0

关注,学习

茂茂 | 园豆:2894 (老鸟四级) | 2010-11-19 15:03
0

应该反过来处理吧。

 

一个文件处理完1.5W个字符串之后,换下一个文件

就是一个文件一个文件的处理

 

一个字符串在4000个文件处理,相当于要把4000个文件打开1.5万次,并加载到内存中

小彬 | 园豆:947 (小虾三级) | 2010-11-19 15:52
这样就达不到效果了。。4000个文件是个整体。。
支持(0) 反对(0) leoD | 园豆:0 (初学一级) | 2010-11-22 11:27
不清楚你具体业务是什么,要达到什么效果,能说明一下么?
支持(0) 反对(0) 小彬 | 园豆:947 (小虾三级) | 2010-11-22 13:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册