2010年8月24日火曜日

日記ちゃん

 メモリマップドファイルを使用したパックファイル読み込みを仮作成してみたが、
最初にパックファイル内のファイルリストを作成する部分がかなり遅くなった。
56個ファイルが含まれているパックファイルのリストを作るのに、
今まで50msかかっていたのが110ms程度と、2倍程度の速度低下。
ReadFileの代わりにMemoryCopyを使ったが却って遅くなるみたい。
 
 今、書きながら思いついたが、
ファイルマッピングするまえにリストを作ればこれまでどおりの処理速度を維持できそうな気がする。
ファイルマッピング後はReadFileとかが使えなくなるのだけど、
ファイルマッピング前に使えるだけ使ってしまおうという発想はどうかな。
msdnを見た感じ、開いた直後のファイルじゃないとマップしちゃだめよとは書いてないっぽいし。
 
 ファイル全体をいったんメモリに読み込んでそこから各種処理する場合にメモリマップドファイルは向いていると思われるが、
たとえばCSVデータの読み込みなんかだと1Byteづつデータにアクセスするから普通にメモリに読んでからのほうが速そうだ。
画像データとかある程度まとまりで読み込むデータだと恩恵がありそうだけど。
もっとシンプルにメモリの節約になるぐらいなのかね。ひょっとして。
うーん、思ってたより使いどころに困る。プロセス間で共有するでもなし。
 
 唯一恩恵を受けられる効果音の読み込み部分に使用してみた。
いったんメモリに読み込んでからoggをwavに変換、その後DirectSoundにデータを渡すという処理を
ファイルのままoggをwavに変換、という処理に変更したところ処理速度大差なしだった。
 ウィンドウズにメモリを貰わず、
あらかじめアプリケーションで確保した作業用のメモリに対して行うので、
メモリ確保の処理もほぼ最速。
結局ファイルを読み込む速度に引きずられるので差が出ないようで。
しかも効果音読み込みは起動時のロゴ表示中に裏で行うから別に速い必要はないという。
 メモリからの読み込みとファイルからの読み込みを統一できるから、
プログラムの記述面で楽が出来るとかそういう感じのありがたみは受けられる。
が、もういまさらなのが悲しい。

0 件のコメント: