Загрузка...

Ускоряем регулярные выражения C#

Тема в разделе C# создана пользователем RaysMorgan 22 окт 2016. 634 просмотра

Загрузка...
  1. RaysMorgan
    RaysMorgan Автор темы 22 окт 2016 https://lolz.live/support-tickets/open 51 796 7 мар 2013
    Часто мы работаем с регулярками, например парсим все ссылки с html документа или нужные слова из файла.
    Когда размер документа или файла незначителен, то нас всё устраивает и мы пользуемся ими дальше.
    Но как только мы начинаем работать с файлами, весом больше гигабайта, жалуемся на скорость регулярных выражений.

    Давайте попробуем немного ускорить regular expression

    Обычно, мы создаем регулярное выражение таким образом: (например, для поиска всех логинов из массива 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);
    }
    }
    }

    Попробуем создать регулярное выражение сразу и зададим опции:
    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 раза.
    Источник
     
    22 окт 2016 Изменено
  2. AnyBoom
    AnyBoom 23 окт 2016 0 13 авг 2016
    Вау, в 0.2 быстрее.
    Лучше уж вообще отказаться от них
     
  3. RaysMorgan
    RaysMorgan Автор темы 24 окт 2016 https://lolz.live/support-tickets/open 51 796 7 мар 2013
    AnyBoom, есть такие задачи, где это необходимо
     
  4. Limbo49005
    Limbo49005 24 окт 2016 ♛๑۩۩๑ VIP ๑۩۩๑♛ 3275 5 сен 2016
    Нихуя не понимаю, но нига вроде шарит, респект !
     
  5. iPro_inactive
    iPro_inactive 25 окт 2016 Заблокирован(а) 30 15 июн 2016
    Есть, но это точно не Html D:
     
  6. micro_inactive
    Если html документ, то регулярки отпихнем в сторону. Зачем есть HtmlAgilityPack?
     
Top