"geriye dönüp bakma" performansı


10

Kullanarak bazı kod var (looking-back … (line-beginning-position)). Doc dizesi looking-back, yavaşlık nedeniyle bu işlevden kaçınmanın daha iyi olduğunu belirtir. Merak ediyorum takip eden yaklaşım daha hızlı olacak mı?

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

Daha hızlı olacak. Ancak bu eşdeğer bir kod değildir.
abo-abo

@ abo-abo, evet, öyle değil. Ama benim durumumda looking-atsürümü kolayca tanıtabileceğime inanıyorum . Teşekkür ederim.
Geradlus_RU

2
Geriye dönüp bakmanın en büyük performans sorunu sınırının (veya uzak olan bir sınırın) olmamasıdır. Eğer düşünürseniz (with-temp-buffer (insert (make-string 10000 ?x)) (looking-back "y"))çok hızlı olduğunu göreceksiniz. Şimdi normal ifadeyi ".*y"bunun yerine değiştirin : İnsan okuyucunun bunun asla eşleşemeyeceği açık olsa da dayanılmaz derecede yavaş.
YoungFrog

Yanıtlar:


9

Kesinlikle. Özellikle char-beforedeğişmez bir dizeyi test etmek veya geriye doğru aramak istiyorsanız özellikle kazanırsınız . Ve eğer kullanmanız gerekiyorsa , mümkünse looking-backbir LIMITargüman kullanmaya çalışın .

Örnek için Emacs hatası # 17284'e bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.