jFD開発したりしなかったり日誌
2008-10-12 [長年日記]
_ 実家
午前11時くらいに起こされた。
朝飯を食べてからお袋に整体を受ける。
まだ眠いんで整体を受けながら寝てしまう。
夕方、弟が戻ってきたんで話す。
晩飯に家族で焼き肉を食べに行く。
なかなかうまい店だ。
腹一杯食べてしまったので、食後に弟と馬鹿話しながら散歩に行く。
戻ったらまた寝てしまった。
_ jFD2
久々に弄る。
前々から気がついていた、たまに発生するUIが固まる問題に対応。
デバッガを駆使して調査すること数時間、やっとのことで原因を発見した。
FileFishにはファイルやディレクトリの監視機能があり、これを利用して
jFD2はファイルが更新された際に表示を自動更新している。
ところが、これとユーザー操作によるディレクトリ移動がかぶると、
タイミング次第でデッドロックが発生していた。
デッドロックをどこで解決するか悩んだが、とりあえずなんとかなった。
ところが、そのテストをしてる最中にメモリ消費量が異常に多いことに気がついた。
コピーに使ってたのはJDKのAPIドキュメントで約12000ファイルなのだが、
大量のメモリを使って落ちる。
プロファイラをダウンロードしてきて調べてたらわかった。
まず、コピー先のファイル作成時にルートディレクトリまで親を辿ってファイル作成
イベントを通知してるのだが、そのおかげで階層の深いディレクトリをコピーする場合、
1ファイルコピーするのに1ファイルにつき10ファイルくらいのファイルインスタンスが
作成されていた。
少々悩んだが、親を辿って通知するのをやめて、親ディレクトリが存在しなかった場合に
親ディレクトリの作成イベントのみ通知するようにした。
この場合、親の親とかが存在しなかった場合、それは通知されないという問題が
発生するんだが、そんなに致命的でもないだろう。
で、コマンド実行後もそれが参照から削除されないという問題も発見。
これもプロファイラで調べたら、経過表示ウインドウからコマンドへの参照が残っていた。
経過表示パネルをウインドウから消したのに、レイアウトマネージャからは参照が
消えてなかった。
なんで?
そういうもんなの?
そこら辺を修正したらとりあえずはいい感じに動くようになった。
2chでリクエストもあったし、もうしばらく弄ってからリリースしよう。