I've tested the 40+ MB jdk150.chm file with hh.exe and xchm, and found
that xchm takes about 2 minutes on my 1.6GHz Celeron laptop, while with
hh.exe it takes about 1 second.
I've browsed your CHM specification for some info about what might cause
that stuff, and found that I could use #TOCIDX, #TOPICS, and all that
stuff that I'm not using :-/. But it's not all clear to me yet how to
use all that information.
Could you make a pretty ASCII picture of the top view of the whole thing
(i.e. how to go about loading the index in a list, and the TOC in a tree)?