William McBrine
Mon, 14 Aug 2006 20:19:04 -0700
The Win32 port of PDCurses has always had a performance problem under Windows 9x. The cause was never quite clear. (I used to think the keyboard code was at fault; but no.)
Yesterday I discovered that I'd fixed it, quite by accident, sometime
after 2.8. I was running newdemo.exe; the test where it randomly fills the
box with 'a', then 'b', is the closest thing to a speed benchmark for
PDCurses. Under 9x, it used to just trickle along, but now it fills up
instantly. So I put a clock() counter around the loop, and tested with
both CVS and 2.8 libraries. The results were astonishing -- under Windows
98, it went from about 6500 to about 100. Windows 95 was even more
dramatic: from around 9000 to about 14! (Note: These results were under
Virtual PC.) Even XP had improved, but only from about 230 to about 200.
Eventually I traced the fix to a change in doupdate(): it no longer
updates the cursor position if the cursor is turned off ("curs_set(0)").
(So, if you leave the cursor on, you still won't see any performance gain;
sorry.) It seems the Windows console function SetConsoleCursorPosition()
is insanely slow. The actual output and input functions are fine -- in
fact, AFAICT, they're faster in 9x than in XP.
BTW, BIOS mode in DOS is also a lot faster now, but in that case I knew
what I was doing. :-) Both changes (among others) are available via
anonymous CVS.
--
William McBrine <[EMAIL PROTECTED]>