[linux perl] ファイルの書き込み速度を向上させる方法。 perlで一度に複数のファイルを書き出すプログラムを作っていますが、openで書き出しています。 ファイルの数が増えるとやはり徐々に完了まで時間がかかってきますが、ファイルを書き出す際の速度向上にはどのようなものがあるでしょうか。 ハードウェアの交換等以外でお願い致します。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/08/31 11:39:08
  • 終了:--

回答(3件)

id:wata5513 No.1

wata5513回答回数57ベストアンサー獲得回数02005/08/31 12:54:39

ポイント47pt

http://www.itmedia.co.jp/help/tips/linux/l0298.html

ITmedia エンタープライズ : Linux Tips「余計なディスク書き込みを軽減させよう〜noatime編〜」

urlの設定を行いrebootするとディスクの書き込みスピードがアップします。

但し、urlにもありますが、この設定によってiノードのアクセス時間が更新されなくなる点をご注意ください。

id:peppon

ありがとうございます

2005/08/31 19:55:19
id:tomoki_u No.2

tomoki_u回答回数48ベストアンサー獲得回数02005/08/31 14:34:03

ポイント47pt

http://www.hatena.ne.jp/1125455948#

人力検索はてな - [linux perl] ファイルの書き込み速度を向上させる方法。 perlで一度に複数のファイルを書き出すプログラムを作っていますが、openで書き出しています。 ファイルの数が..

システムコールを減らしましょう。

また、動的にメモリの増減が行われる場所をループ外に出し、予めメモリを確保しましょう。

恐らくファイルの数が増えるというのは見た目の問題で、実際の問題はメモリの確保・再確保にコストがかかっていると思われます。


差し支えなければ、出力部分のコード等載せていただけませんか。

id:peppon

foreachループの中にopenがあり、ファイルを書き出しています。

省いて書くと

foreach(){

if(){

$hoge = &sub($nantara);

open();

print $hoge

close();

}

}

2005/08/31 20:04:48
id:tomoki_u No.3

tomoki_u回答回数48ベストアンサー獲得回数02005/09/01 15:44:48

ポイント46pt

http://www.hatena.ne.jp/1125455948#1

人力検索はてな - [linux perl] ファイルの書き込み速度を向上させる方法。 perlで一度に複数のファイルを書き出すプログラムを作っていますが、openで書き出しています。 ファイルの数が..

URLはダミーです。

$hoge = &sub($nantara);


この部分で、subを呼んだ時に$nantaraの内容のコピー、returnしたときに$hogeへの戻り値のコピーが多発しています。

これがループ内にあるとかなりの無駄なコピーが発生します。

関数subに渡す変数と戻りの変数で複写が発生しないようにスコープを変えてみてはいかがですか?

扱っているデータが大きい場合、相当なコストが発生します。

id:peppon

> 複写が発生しないようにスコープを変えてみてはいかがですか

具体的にはどのようにすればいいでしょうか。

戻り値を得ないで、グローバル変数に書き込むとかそういう事でしょうか。

2005/09/02 01:18:08

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません