Часто мы работаем с регулярками, например парсим все ссылки с html документа или нужные слова из файла. Когда размер документа или файла незначителен, то нас всё устраивает и мы пользуемся ими дальше. Но как только мы начинаем работать с файлами, весом больше гигабайта, жалуемся на скорость регулярных выражений. Давайте попробуем немного ускорить regular expression Обычно, мы создаем регулярное выражение таким образом: (например, для поиска всех логинов из массива source) public Regex myRegex; public void myFunc() { myRegex = new Regex(@"[a-zA-Z0-9-_.]{6,25}"); List<string> Output = new List<string>(1000*1000); for (int i =0; i < countLines; i++) { if (myRegex.Match(source).Success) { Output.Add(source); } } } csharp public Regex myRegex; public void myFunc() { myRegex = new Regex(@"[a-zA-Z0-9-_.]{6,25}"); List<string> Output = new List<string>(1000*1000); for (int i =0; i < countLines; i++) { if (myRegex.Match(source).Success) { Output.Add(source); } } } Попробуем создать регулярное выражение сразу и зададим опции: static Regex myRegex = new Regex(@"[a-zA-Z0-9-_.]{6,25}", RegexOptions.Compiled); public void myFunc() { List<string> Output = new List<string>(1000*1000); for (int i =0; i < countLines; i++) { if (myRegex.Match(source).Success) { Output.Add(source); } } } csharp static Regex myRegex = new Regex(@"[a-zA-Z0-9-_.]{6,25}", RegexOptions.Compiled); public void myFunc() { List<string> Output = new List<string>(1000*1000); for (int i =0; i < countLines; i++) { if (myRegex.Match(source).Success) { Output.Add(source); } } } Таким образом, прирост скорости будет примерно в 1.2 раза. Источник