> (defun benchmark-often () > (cl-loop for n from 1 upto 20 do > (message (format "iteration %d: %f" n (nth 0 (benchmark-run > (line-number-at-pos (point)))))))) ^^^^^^^ Where is this "point" in your tests (I expect the timing to vary significantly depending on this). > 1st run: > iteration 1: 0.001213 > iteration 2: 0.001170 > iteration 3: 0.001170 > iteration 4: 0.001238 > iteration 5: 0.001163 > iteration 6: 0.001153 > iteration 7: 0.000421 > iteration 8: 0.000426 > iteration 9: 0.000322 > iteration 10: 0.000301 > iteration 11: 0.000291 > iteration 12: 0.000292 > iteration 13: 0.000291 > iteration 14: 0.000291 > iteration 15: 0.000295 > iteration 16: 0.000289 > iteration 17: 0.000289 > iteration 18: 0.000288 > iteration 19: 0.000288 > iteration 20: 0.000287 I recommend you don't bother outputting all 20 results: better summarize it by getting rid of the first test and then giving e.g. the sum or the median of the rest. > I'm not allowed to share my employer's source code as a test case, so > I tried the same procedure with the similarly large DeclBase.h from the > public LLVM repository. To my surprise, DeclBase.h didn't suffer from any > performance issues at all. My crystal ball tells me that DeclBase.h is pure ASCII so byte<->char conversion is trivial, whereas your file likely contains umlauts and other disreputable characters. Here's a similar test case to yours but which builds up its own artificial buffer with a few non-ascii chars to spice things up: (with-temp-buffer (dotimes (i 1000) (insert "lksajflahalskjdféefawrgfrüegf\n")) (let ((txtbuf (current-buffer))) (dotimes (s 4) (with-temp-buffer (insert-buffer-substring txtbuf) (let ((stepsize (lsh 10 (* 4 s)))) (cl-loop for n from (point-min) upto (- (point-max) stepsize) by stepsize do (let ((ov (make-overlay n (+ (1- stepsize) n)))) (overlay-put ov 'cquery-sem-highlight t)))) (dotimes (i 4) (let ((timing (benchmark-run 1000 (line-number-at-pos (+ (point-min) (* i (/ (buffer-size) 4))))))) (message "ols=%S pos=%S/4 time=%.4f (+ %S)" (/ (buffer-size) (lsh 10 (* 4 s))) i (car timing) (cdr timing))) ))))) This gave me (on my top-of-the-line Thinkpad T61 using Debian's `emacs25`): ols=3000 pos=0/4 time=0.0018 (+ (0 0.0)) ols=3000 pos=1/4 time=6.1074 (+ (0 0.0)) ols=3000 pos=2/4 time=10.6876 (+ (0 0.0)) ols=3000 pos=3/4 time=13.7854 (+ (0 0.0)) ols=187 pos=0/4 time=0.0016 (+ (0 0.0)) ols=187 pos=1/4 time=0.3055 (+ (0 0.0)) ols=187 pos=2/4 time=0.6001 (+ (0 0.0)) ols=187 pos=3/4 time=0.8903 (+ (0 0.0)) ols=11 pos=0/4 time=0.0015 (+ (0 0.0)) ols=11 pos=1/4 time=0.0769 (+ (1 0.006324223)) ols=11 pos=2/4 time=0.1439 (+ (0 0.0)) ols=11 pos=3/4 time=0.2215 (+ (0 0.0)) ols=0 pos=0/4 time=0.0015 (+ (0 0.0)) ols=0 pos=1/4 time=0.0548 (+ (0 0.0)) ols=0 pos=2/4 time=0.1102 (+ (0 0.0)) ols=0 pos=3/4 time=0.1690 (+ (0 0.0)) Stefan
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4