2012年8月26日日曜日

CHM コンパイル中に応答がなくなってもあわてない

最近、久しぶりに HTML Help (拡張子 chm) を作ったりしています。

HTML Help をコンパイルするためには、Microsoft HTML Help Workshop というものをダウンロードして、インストールしておく必要があります。HTML Help はかれこれもう十年以上前から存在する形式なので、この辺の情報は検索したらすぐ出てきます。詳細は割愛。

で今回は、大量の HTML をコンパイルしようとすると HTML Help Workshop がしばらく応答無しになりますが、放置しておくと生き返ってコンパイルしだすので、あわてるな、という話です。 たぶん前にも経験して忘れていたと思われるので、完全自分備忘用。

ふつう HTML Help Workshop 上からコンパイル ボタンをクリックしてコンパイルを開始すると、すぐにコンパイル中を示す状況ダイアログが表示されます。

しかし、HTML ファイルが大量にあると、この状況ダイアログが表示されず、HTML Help Workshop のウィンドウが「応答なし」の状態になることがあります。

最初は何かエラーが起きたものと思って強制終了し、ファイルを調べたりしたのですが特に問題は見当たらず。 タスク マネージャーで HHC.exe のプロセスを見ると、少しずつですが使用メモリ量の増減が見られるので、シェルに応答しないだけで生きていると判断し、しばし放置。

スペックはこんな感じ。

Win7 HP x64(ただし HHC.exe は 32bit アプリ)
Intel Pentium P6200 2.13GHz
RAM: 2GB
コンパイル対象: 8,461 ファイル

底辺スペックですが、通常事務処理で問題を感じるレベルではありません。

この辺は推測になりますが、HHC はプリコンパイル処理で各 HTML ファイルに含まれるリンクを解析していて、この処理が低速(たぶんシングルスレッド)かつ割り込み応答しないので、大量だとしばらく応答無しになるものと思っています。

具体的には、上記の条件で約 6 分間無言になります。

その後 息を吹き返し、状況ダイアログが表示されます。

最終的に正常終了したログは、こんな感じ。

Compile time: 13 minutes, 33 seconds
8,461 Topics
132,767 Local links
38,337 Internet links
1,173 Graphics

リンクが内外あわせて約 17 万件あります。ここの解析がネックと推測しています。

トータルで 13 分半かかっていますから、そのうちほぼ前半はずっと応答無しという勘定です。知らないとあせっていろいろいじってしまいますが、単純に待っていればよろしいということです。

あと余談ですが、この規模になると、出力された chm を単純に開くのにも時間がかかります。体感で10秒近く。

最初はファイルサイズ自体がデカい(40MB 近い)ので、あるていど仕方がないのかと思っていましたが、実は毎回目次 (HTML 形式) を解析処理していたせいでした(目次を含めていない場合は、関係ない)。

HTML Help Workshop の [Options]-[Compiler] タブ-[Create binary TOC (check this for a very large TOC)] にチェックを入れてコンパイルすると、バイナリ形式の目次を出力するようになります。

これは、かなり効果がありました。ファイル自体のロードに時間がかかるのはあるていど仕方がないとして、目次の解析が不要になるので、いったんウィンドウが表示されたら、そこからは早いです。以前は、ウィンドウが表示された後、さらに目次の描画待ちみたいな時間がかかっていました。

これはデフォルトでオンになっているべき設定だと思います。もしかしたらデコンパイルしたときに違いが出るのかもしれませんが(推測です、未確認)、今のところバイナリ TOC オンにして困る状況が思い浮かびません。

ちなみに、今回この CHM のオーサリングは Access で管理しています。とにかくファイル数が多いので、DB と連携しないと管理不能だったのですが、久しぶりに使ってみて、やっぱり Access は使いながらガンガン改修していくという場当たり的な開発効率が、すさまじく良いと痛感しました。

ええ、もちろん 2003 ですが何か?

0 件のコメント:

コメントを投稿