«оглядываясь назад» производительность


10

У меня есть код, использующий (looking-back … (line-beginning-position)). Строка документа looking-backгласит, что эту функцию лучше избегать из-за медлительности. Мне интересно, будет ли следующий подход быстрее?

(save-excursion
  (goto-char (line-beginning-position))
  (looking-at regexp stuff))

Это будет быстрее. Но это не эквивалентный код.
abo-abo

@ abo-abo, да, это не так. Но в моем случае я считаю, что могу looking-atлегко представить версию. Спасибо.
Geradlus_RU

2
Самая большая проблема с производительностью при просмотре - когда у него нет предела (или предела, который находится далеко). Если вы (with-temp-buffer (insert (make-string 10000 ?x)) (looking-back "y"))подумаете, то увидите, что это очень быстро. Теперь ".*y"вместо этого измените регулярное выражение : оно невыносимо медленно, хотя читателю ясно, что оно никогда не сможет сравниться.
YoungFrog

Ответы:


9

Определенно. Вы особенно выиграете, если вы просто хотите проверить char-beforeили выполнить поиск литеральной строки в обратном направлении. И если вы должны использовать, looking-backпопробуйте использовать LIMITаргумент, если это возможно.

Смотрите Emacs bug # 17284 для примера.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.