ฟังก์ชั่นline-number-at-pos
(เมื่อทำซ้ำประมาณ 50 ครั้ง) ทำให้เกิดการชะลอตัวลงอย่างเห็นได้ชัดในบัฟเฟอร์กึ่งใหญ่เช่น 50,000 บรรทัด - เมื่อจุดใกล้ถึงจุดสิ้นสุดของบัฟเฟอร์ เมื่อชะลอความเร็วลงฉันหมายถึงผลรวมทั้งหมดประมาณ 1.35 วินาที
แทนที่จะใช้elisp
funciton 100% เพื่อนับจำนวนบรรทัดและข้ามส่วนบนสุดของบัฟเฟอร์ฉันสนใจวิธีไฮบริดที่แตะเข้าไปในความสามารถ C ในตัวที่รับผิดชอบต่อหมายเลขบรรทัดที่ปรากฏบนโหมดบรรทัด หมายเลขบรรทัดที่ปรากฏบนโหมดบรรทัดเกิดขึ้นที่ความเร็วแสงโดยไม่คำนึงถึงขนาดของบัฟเฟอร์
นี่คือฟังก์ชั่นทดสอบ:
(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))