Top 上へ 目次
更新速度 ver.4.75
ちょっと前に書いた記事のエクスプローラーと比較のベンチマークですが、なんだかAs/Rの速度が遅いな・・・こんなに鈍かったっけ?と感じていました。
前書いた記事
CPU負荷が3%未満になるまでの時間です。
並び順は、エクスプローラーは名前順、As/Rは文字コード順です。
ファイル数は100万個、全角・半角混在
As/Rの速度を上げる安全装置を全て解除する以外は、全て初期値
OSはWindows7で、ほぼ初期状態の性能評価用の環境です。
操作内容
1.ファイル一覧の表示完了
2.先頭のファイル1個選択し、コピー&ペーストしてファイルを追加
3.2で作ったファイルをリネーム
4.3でリネームしたファイルを削除
操作 | As/R | explorer | 速度差 |
一覧表示 | 3,245ms | 99,220ms | 30.5倍 |
1ファイル追加 | 1,210ms | 585,200ms | 483.6倍 |
1ファイルリネーム | 1,925ms | 587,840ms | 305.4倍 |
1ファイル削除 | 1,430ms | 585,530ms | 409.5倍 |
これですこれ。
更新処理を見直してみた結果、更新イベントのメッセージを最適化する処理が結構微妙な感じでした。
実装している半分(フロントエンド側)の最適化処理に問題があって無効化してたのもありましたが、今回は全ての最適化処理を通るようにしてみました。
モノによって2倍以上速くなってますな・・・。
操作 | As/R | explorer | 速度差 |
一覧表示 | 3,245ms | 99,220ms | 30.5倍 |
1ファイル追加 | 743ms | 585,200ms | 787.6倍 |
1ファイルリネーム | 938ms | 587,840ms | 626.4倍 |
1ファイル削除 | 1,041ms | 585,530ms | 562.5倍 |
ここまで差がついちゃうと、もうエクスプローラーとの速度差なんて気にしなくていいじゃん風味ではありますが、適当な指標がないのも困ったものです。
次に上のベンチマークには全く現れない改善です。
更新イベントで「ファイルの情報の取得に失敗するはずのイベント」をあらかじめ読み飛ばして、ディスクキャッシュへのアクセスを減らすロジックを組み込こんでます。
具体的には、前回の記事のExcelの上書き保存の時にこれだけ14個のイベントが発生するわけですよ。
1:file added: 8CD66810(新たに保存用のテンポラリファイル、追加)
2:time stamp or attribute changed: 8CD66810(属性変更)
3:time stamp or attribute changed: 8CD66810(属性変更)
4:time stamp or attribute changed: 8CD66810(属性変更)
5:time stamp or attribute changed: 8CD66810(属性変更)
6:time stamp or attribute changed: 8CD66810(属性変更)
7:time stamp or attribute changed: テスト.xl(属性変更)
8:time stamp or attribute changed: 8CD66810(属性変更)
9:time stamp or attribute changed: 8CD66810(属性変更)
10:file name changed - old name: テスト.xls → 2DAAC0D4.tmp(リネーム)
11:file name changed - old name: 8CD66810 → テスト.xls(リネーム)
12:time stamp or attribute changed: 2DAAC0D4.tmp(属性変更)
13:time stamp or attribute changed: テスト.xls(属性変更)
14:file deleted: 2DAAC0D4.tmp(削除)
今までは、わりと馬鹿正直に新規作成/リネーム/削除のイベントを反映させていたので、今までは8回のイベントを処理していました。
まぁ、それでもオーバースペックだったわけですが・・・
1:file added: 8CD66810(新たに保存用のテンポラリファイル、追加)
7:time stamp or attribute changed: テスト.xl(属性変更)
8:time stamp or attribute changed: 8CD66810(属性変更)
10:file name changed - old name: テスト.xls → 2DAAC0D4.tmp(リネーム)
11:file name changed - old name: 8CD66810 → テスト.xls(リネーム)
12:time stamp or attribute changed: 2DAAC0D4.tmp(属性変更)
13:time stamp or attribute changed: テスト.xls(属性変更)
14:file deleted: 2DAAC0D4.tmp(削除)
こいつら遅延処理で見てるので、実際のファイル操作とタイムラグがあって結構失敗するんですよね。
ですから、これらを全部まとめて
13:time stamp or attribute changed: テスト.xls(属性変更)
1回の更新イベントに置き換えるってぇ事をやってます。
まぁリネームとか更新とか、実はいろんな種類があるので一概には言えないんですが、概念的なところはこんな感じです。
さて、ここで残念なお知らせです。
うちのビルド&リリース専用のPCがぶっ壊れました。てへ。
というわけでリリースは、修理が終わるまで気長にお待ちください。(^^;;;;;