Hàm line-number-at-pos
(khi lặp lại khoảng 50 lần) đang gây ra sự chậm chạp đáng chú ý trong các bộ đệm bán lớn - ví dụ: 50.000 dòng - khi điểm gần cuối bộ đệm. Làm chậm lại, ý tôi là tổng cộng khoảng 1,35 giây.
Thay vì sử dụng elisp
funciton 100% để đếm các dòng và goto trên cùng của bộ đệm, tôi quan tâm đến một phương pháp kết hợp khai thác các khả năng C tích hợp chịu trách nhiệm cho số dòng xuất hiện trên dòng chế độ. Số dòng xuất hiện trên dòng chế độ xảy ra ở tốc độ ánh sáng, bất kể kích thước của bộ đệm.
Đây là một chức năng kiểm tra:
(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))