【发布时间】:2014-02-02 09:39:36
【问题描述】:
以下是我为读取文本文件而编写的方法。在阅读时,我需要将行字符串与给定的正则表达式匹配,如果匹配,则需要将行字符串添加到集合中。
private static void GetOrigionalRGBColours(string txtFile)
{
string tempLineValue;
Regex regex = new Regex(@"^\d+.?\d* \d+.?\d* \d+.?\d* SRGB$");
using (StreamReader inputReader = new StreamReader(txtFile))
{
while (null != (tempLineValue = inputReader.ReadLine()))
{
if (regex.Match(tempLineValue).Success
&& tempLineValue != "1 1 1 SRGB"
&& tempLineValue != "0 0 0 SRGB")
{
string[] rgbArray = tempLineValue.Split(' ');
RGBColour rgbColour = new RGBColour() { Red = Convert.ToDecimal(rgbArray[0]), Green = Convert.ToDecimal(rgbArray[1]), Blue = Convert.ToDecimal(rgbArray[2]) };
originalColourList.Add(rgbColour);
}
}
}
}
当这个方法对一个有 28653 行的4MB 的文本文件运行时,完成上述方法大约需要 3 分钟。此外,作为上述运行的结果,originalColourList 填充了 582 个项目。
谁能指导我如何提高这种方法的性能?实际文本文件大小可能高达60MB。
仅供参考-
正则表达式的正确匹配:0.922 0.833 0.855 SRGB
正则表达式匹配错误:/SRGB /setrgbcolor load def
txt 文件最初是一个 postscript 文件,我已将其保存为 txt 文件以便使用 C# 进行操作。
【问题讨论】:
-
如果您向我们展示您的正则表达式的正确匹配和错误匹配,您可能会得到更好的答案。这可以帮助我们确定您的正则表达式是否真的需要。
-
已编辑以包含更多详细信息。