2011年4月 6日 (水)ファイル書き込み要注意
おはようございます。本日の当番プログラマのT.Yです。
最近軽くツールを高速化する機会があったときの事をネタにしてみようと思います。
どういった高速化かというと、タイトルにもある通り書き込みです。
比較的よく使うツールなのですが、欠点として保存に時間がかかるのが目立ちます。
そろそろ何とかしたいなぁと言うことで、保存周りの処理を見てみると。
ファイルを開いた後に、保存用のデータを構築しながら保存する処理になっていました。
どういう事かと言うと、ファイルを開いた後に書き込むデータを作っては書き込み、作っては書き込みを繰り返す処理です。
最後まで書き込んだらファイルを閉じるって奴ですね。
まぁ、書き込む関数がfwrite(書き込みバッファ、書き込むデータ、書き込むデータの1個単位のサイズ、個数)といった奴なので、
構造体を作っては書き込みを繰り返す処理に使用すると結構便利です。
ただし、ファイルに書き込む処理なので何度も細切れに呼び出すと速度的に問題がありそうです。
ということでツール自体はPCで使うツールであり、今日日のPCスペックでメモリが足りないなんて事も無いはず。
保存するサイズ分のバッファを作ってそこで全て処理した後に一気に書き込む処理へ変更したところ・・・
数分要していた保存時間がなんと5秒以下に!!!
うーん・・・
この関数は遅いはずと思ってはいたけど、まさかここまで改善されるとは・・・
ファイルに書き込む処理を作る時は少しずつ書き込むよりは、ある程度貯めてから一気に書き込む。
もし保存が遅いと思ってる自分のツールがあったら見てみたら良いですよ~
あっ! でもよくよく考えればfopen、fwrite、fcloseじゃなくて、
WindowsのCreateFile、WriteFile、CloseHandleを使うと書き込みキャッシュが効くはずなので、
実はそれだけでも十分だったのかも。
まぁ、それはいつの日かということで。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。








コメント