ログファイルの保存
C#のStreamWriterの挙動について
消費メモリと処理速度の観点から検証しましたが、やはりファイルオープンしっぱなしで毎フレームちょっとずつ音声データをWrite、最後にファイルクローズという手法で問題なさそうです。
こういうのがやりたかったのですが、ネット上のサンプルコードがなぜか即Flush()
即Close()
してばっかりで「そうじゃねんだよなぁ……」って感じなので自分で作りました。
使い方
_fileWriter = new TextFileWriter(Application.temporaryCachePath + "/temp.txt");
for (int count = 0; count < 10000; count++)
{
_fileWriter.Write(count);
}
_fileWriter.Dispose();
ちゃんと保存されます。
Flush()
とClose()
はDispose()
のときにしか呼んでいません。なので使い終わったら必ずDispose()
してください。呼ばなくてもわりと保存されてますが。
'StreamWriter.AutoFlush'をtrue
に設定すると書き込むたびに中でFlush()
してくれるようです。パフォーマンスに影響は出ますが、はっきりわかるレベルまで負荷がかかることはないと思います。嫌だったらAutoFlush
のくだりを消しておいてください。デフォルトはfalse
です。
public TextFileWriter(string path)
{
_streamWriter = new StreamWriter(path, true, Encoding.UTF8) {AutoFlush = true};
}
まとめ
わざわざラッパー作らなくてもStreamWriter
直叩きでいいかな……って気がすごくしますが、まあ作っちゃったのでいちおう。パフォーマンス計測とかあんまりやったことないのでどうしたらいいか知らないのです。基本は気合と根性で書いて、速度はフレームワークとかハードウェアがなんとかしてくれるゆとり世代です。
ところでほんとにこれっぽいサンプルがネットで見つからなかったのですが、あまりにも当然だから書くまでもなかったのか、実はそんなに需要がないのか。謎。
おしまい。