2016年02月14日

「改行コード変換」の失敗。処理基盤の汎用化のしすぎ

改行コード変換というプログラムを作成しています。今日時点の最新版は、ver.1.22.06です。

lclui_ss.png

元々の作成目的としては、テキストファイル中の改行コードをCR+LFに変更したり、LFに変更したりすることだったのですが、その後の改修でで、全角スペースを半角スペース2つに置換したり、行末のスペースをトリムしたり、タブを適切なスペース個数に置換したり、…など、作者が仕事で必要になったテキストファイルの編集機能をどんどん追加していくことになりました。

ただ、色々機能を追加した結果、動作速度がとてつもなく遅くなってしまったようです。
その影響は、大きなファイルであるほど顕著に表れます。
例えば、160MBのテキストファイルに対して、「右に指定したバイト数毎に改行コードを挟む」指定をした場合、20〜30分程度の時間が掛かってしまいます。

原因は、機能が増えすぎたために、様々な機能を共通の基板上で行うようにしてしまったことです。
一度、ディスクからメモリに読み出しを行い、メモリ上で様々な処理を行いますが、挿入処理の場合はメモリの再確保と文字列の挿入処理のために恐ろしいほどに時間が掛かってしまいます。しかも、内部的にUnicodeへの変換処理と、元の文字コードに戻す処理が走っているので、なおさら効率が悪い。

これをもし、共通の基板上での処理のような形にせず、単純にファイルの読み書き処理の中だけで改行コードの挿入処理だけを行う(「指定バイト数のfread→読み込めたバイト数のfwrite→改行コードのfwrite」の繰り返しとする)なら、5秒くらいで終わります。
今のままでは余りにも効率が悪い。

改行コード変換は、ゼロベースで作り直す必要がありそうです。


posted by ayacy at 02:21 | Comment(0) | TrackBack(0) | フリーソフト