Tagged as lisp
Written on 2019-11-15 19:00:00
Quick lisp performance tip about using
Recently I was hacking on my game-engine, vert. I noticed the framerate lagging. Using SBCL's profiler I found the culprit: calling
restart-case inside of a hot code path (in my case, once every game update frame).
To verify I made this bit of code. It times calling
restart-case under a loop.
(time (loop :for i :from 0 :below 100000 :do (restart-case 'do-work (continue () :report "Continue") (shutdown () :report "Shut down" '(shutdown)))))
Evaluation took: 0.006 seconds of real time 0.006037 seconds of total run time (0.003030 user, 0.003007 system) 100.00% CPU 12,192,576 processor cycles 6,422,512 bytes consed
When using SBCL's
time utility, it's a good idea to put your questionable code inside a loop to get a good idea of how it behaves over many calls.
The moral of the story? Don't use
restart-case in a hot codepath.