2016年02月23日

ファイルサイズを求めるのにfseek()とftell()を使ってはいけなかった件2

先日の「ファイルサイズを求めるのにfseek()とftell()を使ってはいけなかった件」ですが、昨日までで、最近公開した主要ソフトのうち半分は修正を終えました。

あと3本ほど、手を付けられなかったソフトがありますが、

  • 2/27(土)予定:マウスのお供
  • 2/28(日)予定:ListView to CSV
  • 2/29(月)予定:マウスふるふる

で対応していこうかと考えております。なんとか2月中にカタを付けられたらな、と。



話は変わりまして、改行コード変換ライト(仮称)のβ版ですが、本日公開のバージョンで、「無効なコントロールコードの削除」機能を追加しています(これまではスペースかドットへ置換する機能しかなかった)。

delctrlc_cd.png

実は置換だけの方が実装がラクでした。
特定のコントロールコードを見つけたら、その部分のコードを書き換えるだけなので。

削除する場合、特定のコントロールコードの部分を削除したら、「詰める」処理を行わなければなりません。
メモリ上の、特定のコントロールコードの部分以降のコードを、全部一つずつズラしていく感じで。

従 来のバージョンだと、あまり速度を気にしなかったので、std::vector で準備された文字配列変数の中で特定のコントロールコードを見つけ次第、その要素を詰める処理をしていたわけですが、それだとコントロールコードを見つけ た数だけメモリ内を大規模に移動させる処理が生じるので、ファイルサイズが大きいと処理効率が悪くなっていました。

今回の場合、メモリ上で詰める処理を行うのではなく、ディスクへライトする際に、特定のコントロールコードの部分だけをライトしないようにしています。
ライトキャッシュの利用効率とか、DMAの活用の観点等で性能が落ちる可能性がありますが、メモリ上で要素詰めの処理が無駄に発生しない分、全体的な処理効率は上がっていることを期待しています。


posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | フリーソフト
この記事へのコメント

この記事へのトラックバック