【发布时间】:2009-04-02 17:43:10
【问题描述】:
using System;
using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
namespace regex
{
class MainClass
{
public static void Main(string[] args)
{
Regex exp = new Regex(@"e(-)?m[a@]il(s)?|input|output|padr(ão|ões)|máquina(s)?|reconhecimento",
RegexOptions.IgnoreCase | RegexOptions.Compiled |
RegexOptions.Multiline | RegexOptions.ExplicitCapture);
for (int filecount = 0 ; filecount < 22 ; filecount++)
{
string file = "/home/files/file"+ string.Format("{0:0#}",filecount) + ".txt";
StreamReader reader = new StreamReader(file);
string text = reader.ReadToEnd();
int c=0;
MatchCollection matchList = exp.Matches(text);
c = matchList.Count;
Console.WriteLine("Reading " + file + " -> " + c + " matches");
}
}
}
}
如果我注释掉这一行
c = matchList.Count;
它非常快。但我需要知道它找到的匹配数。
这是最快的方法吗?对于我拥有的文件组,解析每个文件需要 14 秒。 Perl 需要 1 秒才能输出完全相同的信息。
PS:每个文件(文本文件)的大小为 +/- 1Mb,因此处理时间约为 20Mb。
谢谢 ;)
【问题讨论】:
-
为什么不继续使用 perl?
-
如果你先将所有文件读入内存,然后做正则表达式呢?
-
Sean 我正在研究不同的技术来比较它们,我只是不明白为什么 c# 的性能如此糟糕。必须有办法改善这一点。 Phi 不适用于我接下来要做的事情(读取每秒非常快的单个文件,这意味着我不确定它们有多少)
标签: c# regex performance file