Ниже приведен метод, который я написал для чтения из текстового файла. Во время чтения мне нужно сопоставить строку строки с заданным регулярным выражением, и если она соответствует, мне нужно добавить строку в коллекцию.Чтение из текстового файла с помощью Regex
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);
}
}
}
}
Когда этот метод выполняется для текстового файла 4MB
, имеющие 28653 строк, она занимает около 3 минут просто закончить вышеупомянутый метод. Кроме того, в результате вышеуказанного запуска originalColourList
заселен 582 пунктами.
Может ли кто-нибудь указать, как я могу улучшить производительность этого метода? Фактический размер текстового файла может увеличиться до 60MB
.
FYI-
Right Match для Regex: 0,922 0,833 0,855 SRGB
Неправильный матч для Regex:/SRGB/setrgbcolor нагрузки Защиту
Файл TXT изначально файл постскриптум, я сэкономил, что в текстовый файл для манипуляций используя C#.
Вы можете получить более качественные ответы, если вы покажете нам правильные и неправильные совпадения для вашего регулярного выражения.Это может помочь нам определить, действительно ли требуется ваше регулярное выражение. –
отредактирован, чтобы включить более подробную информацию. – iniki