ফাংশন line-number-at-pos
(যখন প্রায় 50 বার পুনরাবৃত্তি করা হয়) আধা-বড় বাফারগুলিতে লক্ষণীয় ধীর-ডাউন ঘটায় - যেমন 50,000 লাইন - যখন পয়েন্টটি বাফারটির শেষের কাছাকাছি হয়। ধীর-ডাউন দ্বারা, আমি প্রায় 1.35 সেকেন্ডের সম্মিলিত মোট অর্থ।
elisp
গণনা-লাইনগুলি এবং বাফারের শীর্ষে যেতে 100% ফানসিটন ব্যবহার করার পরিবর্তে , আমি একটি হাইব্রিড পদ্ধতিতে আগ্রহী যেটি মোড-লাইনে উপস্থিত লাইন নম্বরটির জন্য দায়বদ্ধ অন্তর্নির্মিত সি সক্ষমতায় ট্যাপ করবে। বাফারের আকার নির্বিশেষে মোড-লাইনে প্রদর্শিত লাইন নম্বরটি হালকা গতিতে ঘটে।
এখানে একটি পরীক্ষা ফাংশন:
(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))