jFD開発したりしなかったり日誌
2007-08-28 [長年日記]
_ jFD2ベータ9リリースしました
やっとこさ出せました。
ファイルリストがらみの強化がメインです。
・ファイルリストの作成コマンド追加(Shift+F)
・スマートファイルリストの作成コマンド追加(Shift+S)
・スマートファイルリストの編集画面(スマートファイルリストを選んでShift+Enter)
・ファイルリストの編集機能(ファイルリストを開いて、そこにファイルをコピーしたり削除したりで編集できます)
さらに細かくいろいろバグ取りをして、使い勝手は良くなってると思います。
くたびれたんでファイルリストの説明は明日作ろう・・・
_ 某社へ
とにかく書けない事だらけなんで参るなあ。
某氏に連れられて某社へ。
大変に綺麗な新しいビルだ。
というか、このビルには一回来たことがあった。
しばらく待ってもう一人、Nさんと合流し、某社へ。
あれ、この会社来た事あるよ、僕。
某勉強会の会場だ。
5人くらいのエンジニアの方とお話し、大変見のある時間をすごせた。
用事を終わらせビルを出ようと思ったら、外は雷雨。
1階エントランスはガラス張りなのだが、ガラスに雨が川のように流れていた。
某氏に祝い事が会ったので、せっかくだから一杯ご馳走することにして
ビルの中の中華料理屋へ。
なかなかうまい。
お値段もそこまで高くないし。
Nさんは腰を痛めてて、今までやっていたゴルフが出来なくなってしまったそうだ。
昔階段を落ちて入院したが、看護婦と喧嘩して無理やり退院し、リハビリをしなかったら
数年後の今になって後遺症が出てしまったらしい。
気の毒に。
しばらく話して、雨がやんだので解散。
_ 区ト間へ
気分がよかったのでそのまま区ト間へ。
相変わらず霧の中の愛人を切らしていて残念。
仕入れておいて下され。
店員のお兄さんにごきぶりポーカーを見せたら興味を持っていた。
今度みんなでやりましょう。
ふと思い立って、代官というゲームを教えてあげた。
人数と空のペットボトルが一本そろえばどこでも出来るが、本気で健康を損なう
危ないゲームだ。
教えてあげたら受けてた。
_ jFD2
jFD2ではローカルファイルの処理にはK.Takataさん作のFastFileを使っている。
Javaのファイル属性取得は恐ろしく効率が悪い実装になっていて、
特に昔のPCではC:\Windows\system32を開くのに10秒かかかったりしていた。
これをFastFileでは効率化していて、ディレクトリのファイル一覧取得時
(File#listFiles()のオーバーライド)にJNIを使用し、ついでに属性も取得して
キャッシュしておいてくれている。
特に僕がThinkPadのS30とかを使ってた時代(PentiumIIIの600MHzだった)には非常に
有効だったんだが、jFD2を使っているとたまにファイルの操作中にストンと落ちることがあって、
これの原因がFastFileだということが判明した。
C部分のソースを追っていたらスレッドセーフになってなくて、複数のGrep処理を一度にかけたりすると
落ちるようだ。
とりあえずK.Takataさんに報告。
Javaのレベルで対策はしておいたが、K.Takataさんのほうで対策されたら差し替えよう。
- http://cappuccino.jp/keisuken/logbook/ ×9
- http://cappuccino.jp/keisuken/logbook/20070904.htm... ×8
- http://cappuccino.jp/keisuken/logbook/20070831.htm... ×3
- http://cappuccino.jp/keisuken/logbook/20070831-3.h... ×2
- キーワード不明 ×15 / jfd2 ×6 / jfd2 ファイル 属性 ×2 / java listFiles ソート ×1 / Thinkpad ストンと落ちる ×1 / jFD2 ファイル属性 ×1 / JNI スレッド セーフ ×1 / jfd 編集 ×1 / JNI 遅い 早い ×1 / jFD2 ×1 / 多分木 ファイル ×1 / たんでファイル ×1 / ファイル一覧 FastFile ×1 / CaffeineView ×1 / scala オーバーライド ×1 / java ファイル一覧 ソート ×1 / ファイルリスト 取得時間 ×1 / java listfiles 遅い ×1 / listfiles java 遅い ×1 / listfiles 時間がかかる ×1 / ファイルリスト取得 File[] listFiles ×1 / "スマート" ファイル ×1 / jFD2 ×1 / listFiles java 遅い ×1 / JNI スレッドセーフ ×1 / jni ポインタ取得 ×1 / Jfd2 ファイル 属性 ×1
CaffeineViewという画像ビューアを突発的に作ったのですが,File情報をキャッシュするFileCache(extends File)というのを作って対処しました(ソートする前にFileCache化).
これだけでもかなり速くなりましたが,IrfanViewなども結構遅かったんでそんなもんなのかなぁと思いましたけどやはり遅いですね(^^;.
#速いマシンで動かせばあまり気にならなかったのですけど.
仕事の手が空いたときにCaffeineView試させていただきました。
Scala面白そうですね。
これはK.Takataさんの受け売りなんですが、Javaのファイルの属性取得は、
1、ディレクトリの先頭ファイルポインタ取得
2、目当てのファイルまでポインタをたどる
3、そのファイルの属性を返す
というのを毎回やってるようです。
そのため、ディレクトリのファイルが増えれば増えるほど2にかかる時間が長くなり、属性取得が遅くなるみたいです。
FastFileではlistFiles()をオーバーライドして、ネイティブで一覧取得しながら属性もキャッシュしちゃうんで速いそうですよ。
Shunjiさん:
CaffeinViewをFastFileで実装しなおしてみたら,逆に遅くなっちゃいました.元々メタ情報をキャッシュしていたのでチューニングはうまくいっているようです.
もちろんFastFile自体は速いのを確認したのですが(少なくともlistFilesは2倍ほど速い),Java 6だと改善したのか思ったほど遅くない感じです.
>2、目当てのファイルまでポインタをたどる
FAT32はリニアサーチですが、NTFSだと二分木だかを使っているので、最近の環境なら実はそれほど問題にはならないのかも知れません。
Java 6がどうなのかは全然チェックしていないので分からないです。
jFD2でC:\Windows\SYSTEM32(約2600ファイル)を開く場合、FastFileのDLLを使った場合ほぼ一瞬、使わなかった場合は1.5〜2秒程度かかりました。
2秒なら実用上十分なんですが、それでもやっぱりこの差は大きいですね。
K.Takataさん,Shunjiさん:
CaffeineViewを改良してFastFileを使った場合,まだまだ改良の余地がありそうですけど30%速くなりました.
なるほど,ファイルシステムによってもパフォーマンスは変わるんですね.
用途にもよりますが、うまく使えばFastFileの手法はかなりパフォーマンス向上になりますね。
重宝しています。