İşlev line-number-at-pos
(yaklaşık 50 kez tekrarlandığında), nokta tamponun sonuna yakın olduğunda, yarı büyük tamponlarda (örn., 50.000 satır) belirgin bir yavaşlamaya neden olur. Yavaşlama ile toplam yaklaşık 1,35 saniyelik toplam demek istiyorum.
elisp
Satırları saymak ve arabellek üstüne gitmek için % 100 bir funciton kullanmak yerine , mod satırında görünen satır numarasından sorumlu yerleşik C yeteneklerine giren bir melez yöntemle ilgilenirim. Mod satırında görünen satır numarası, arabellek boyutundan bağımsız olarak ışık hızında gerçekleşir.
İşte bir test fonksiyonu:
(defmacro measure-time (&rest body)
"Measure the time it takes to evaluate BODY.
http://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00087.html"
`(let ((time (current-time)))
,@body
(message "%.06f" (float-time (time-since time)))))
(measure-time
(let* (
line-numbers
(window-start (window-start))
(window-end (window-end)))
(save-excursion
(goto-char window-end)
(while
(re-search-backward "\n" window-start t)
(push (line-number-at-pos) line-numbers)))
line-numbers))