फ़ंक्शन line-number-at-pos
(जब लगभग 50 बार दोहराया जाता है) अर्ध-बड़े बफ़र्स में ध्यान देने योग्य धीमा-नीचे का कारण बन रहा है - जैसे, 50,000 लाइनें - जब बिंदु बफर के अंत के पास होता है। धीमे-धीमे से मेरा मतलब कुल मिलाकर लगभग 1.35 सेकंड है।
elisp
काउंट-लाइन्स और बफ़र के शीर्ष पर 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))