人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: peppon
●カテゴリ:ウェブ制作
✍キーワード:Linux open Perl ハードウェア ファイル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● wata5513
●47ポイント

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

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

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

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

◎質問者からの返答

ありがとうございます


2 ● tomoki_u
●47ポイント

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

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

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

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

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


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

◎質問者からの返答

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

省いて書くと

foreach(){

if(){

$hoge = &sub($nantara);

open();

print $hoge

close();

}

}


3 ● tomoki_u
●46ポイント

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

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

URLはダミーです。

$hoge = &sub($nantara);


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

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

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

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

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ