最初の読み込みは、2.6 ~ 2.8 倍程度、高速化されています。最初の読み込みとは、サムネイルキャッシュがない状態から、サムネイルキャッシュと、表示サイズの画像を作成するまでの時間を指します。また、ファイルのイメージが OS のキャシュに載っていない状態を想定しています。
OS にファイルのキャッシュがある場合 (同じ画像を連続して読み込んだ場合など) や、サムネイルキャッシュが用意済みの場合 (ミルノで表示サイズを変えただけの場合など) は、そこまでの高速化はみこめません。
番号 | 2.0.7 | 2.0.8 | 高速化 |
---|---|---|---|
1A | 28.192 + 9.887 = 38.079 | 13.277 | 2.87 倍高速 |
2A | 27.902 + 9.871 = 37.773 | 13.212 | 2.86 倍高速 |
3A | 27.932 + 9.887 = 37.819 | 13.217 | 2.86 倍高速 |
平均 | 28.009 + 9.882 = 37.891 | 13.235 | 2.86 倍高速 |
番号 | 2.0.7 | 2.0.8 | 高速化 |
---|---|---|---|
1B | 25.124 + 10.624 = 35.748 | 13.795 | 2.59 倍高速 |
2B | 25.31 + 10.751 = 36.061 | 13.819 | 2.61 倍高速 |
3B | 25.391 + 10.624 = 36.015 | 13.865 | 2.60 倍高速 |
平均 | 25.275 + 10.666 = 35.941 | 13.826 | 2.60 倍高速 |
2.0.8 では、2 種類の方法で、PNG 読み込みを高速化しています。
1 つは、サムネイルキャッシュ読み込みステージで、表示サイズの画像も同時に読み込むことによる高速化です。上の表の 2.0.7 の列では足し算で 2 つの値を合計していますが、合計前の 2 つの数字が、サムネイルキャッシュ読み込みステージと表示サイズの画像読み込みステージのそれぞれにかかる時間を表しています。
一方、2.0.8 は最初のステージで両方とも読み込まれるため + 記号はありません。
PNG ファイルには普通サムネイル画像が、別に用意されていないため、サムネイルも表示サイズの画像も、オリジナルサイズの画像を拡縮して作成します。
ところが、サムネイル読み込みステージと、表示サイズの画像読み込みステージがわかれていると、最初のステージで読み込んだオリジナルサイズの画像を一旦破棄して※、再読み込みするため、遅くなります。
※ 破棄しない手もありますが、巨大な画像を扱う場合には、現実的ではありません。
そこで、2.0.8 では、画像キャッシュ用のメモリーが足りている場合、サムネイル読み込みステージで、表示サイズの画像も同時に作成することで高速化しました。
ミルノでフォルダーを移動した場合、2.0.7 では、全てのサムネイル (少しぼやけた画像) が表示された後、順に鮮明な画像が表示されていきますが、2.0.8 では、最初から鮮明な画像が表示されていくのが確認できると思います。
もう 1 つは、PNG 読み込みに使用している WIC (Windows imaging component) の使い方を最適化することで、高速化を実現しました。
2.0.7 の実験結果では、どの行でも同じ傾向があるのですが、例えば 1A 行は 28.192 + 9.887 ですね。これは、2 回目のオリジナル画像の読み込みが超高速なことを示しています。これは、同じファイルからの 2 回目の読み込みなので、キャッシュが効いたためと思われるのですが、実はココに高速化のヒントが隠されていて、それを利用すると 1 回目の読み込みから高速化できます。
まず、2 つのフォルダーを用意します。2 つのフォルダーには同じ 36 枚の画像を別のオプションで圧縮した PNG ファイルを用意しました。
次に、2.0.8 でそれぞれのフォルダーを「交互に」コマンドライン引数に指定して実行し、時間を計測していきます。交互に指定するのは、OS のキャッシュが効きにくくするためです。実際同じフォルダーで繰り返し測定すると、2 回目からキャッシュが効いて速くなってしまいます。
同様に、2.0.7※ でもそれぞれのフォルダーでの読み込み時間を「交互に」測定して実験は終わりです。表には、表示中の 28 画像の読み込み完了までの時間をまとめてみましたが、画像キャッシュが足りている間は先読みにも同様な効果が期待できることが、実験で確認されています。
※ 実際は、2.0.8 を 2.0.7 と同じように動くようにコンパイルしなおしたもの。リリース版には計測機能を含めないためです。2.0.8 もリリース版では、ちょっとでも高速に動かすため、計測機能をはずすしますが、結果にはほとんど影響しないと思います。
ご意見・ご要望などは
フォームメール
から送信してください。
更新情報は、
ブログ
でも配信してます。