print <LOG>; は重い?

[上に] [前に] [次に]
こけし 2000/06/09(金) 23:23:00
open(LOG, "hoge.log");
@log = <LOG>;
print @log;

は重いといいますが、

open(LOG, "hoge.log");
print <LOG>;

はどうでしょうか?

B-Cus 2000/06/10(土) 01:36:50
重いという表現はアレだけど、(少なくとも perl5.00503 では)
print @log と同じです。なので
  open(LOG,"hoge.log");
  while (read(LOG,$_,8192)){
    print $_;
  }
とか。

Web作者 2000/06/10(土) 02:28:25
少し気になったのですが、
私も[print <LOG>;]とかやっているのですが(^^;
B-Cusさんが書いて下さった、ソースコードとどう違うのでしょうか?
また、8192というのは何ですか?

追加質問ですみません。

水影 [HomePage] 2000/06/10(土) 02:51:24
メモリの消費の仕方が違うでしょ?
8192ってしておけば、多くてもメモリは 8192 バイト
しか確保しなくて済むはずですが、
@log に代入するとそのファイルのサイズの分だけ
メモリが必要になりますから…

Web作者 2000/06/10(土) 02:58:29
ご返信ありがとうございます。
なるほど、8192というのは、メモリ取得のことなんですね。
ありがとうございました。

水影 2000/06/10(土) 03:10:11
まちがってるかもしれないから、
ヒソカ氏とか B-Cus氏とか D.D.氏とか Fuji.♪氏などの (順不同)
詳しい人の意見をきいてから納得したほうがよいと思う。

#そんなんならはじめから書き込むなとはいわないように (^^;
#たまには詳しくない人が書き込んだっていいじゃない

ヒソカ 2000/06/10(土) 03:18:09
オレ、Perlは素人。Perlなら、B-Cus氏にまかせちゃう。
PHPのときは出て行くね。

ヒソカ 2000/06/10(土) 03:21:54
PHPホントニ大丈夫か? > オレ

ヒソカ 2000/06/10(土) 03:30:40
ここには、結構な数のプロの人たちがいるから
オレなんかより、信頼できるよ。

Fuji.♪ [E-Mail] [HomePage] 2000/06/10(土) 12:38:54
何か呼ばれたようですが、残念ながら私もPerlは詳しいとはとても言えないのでした。
私は基本がC++ですので。

まぁ、perlfuncを読めば分かる程度のことは調べて欲しいと思うのですが、最大で8192バイトまでしか読まないよ、という事ですね。
一気に読み込まずに、8KBずつ読み込んでは表示する、という処理になっているだけです。

while(<LOG>) {
    print $_;
}

との違いは、読み込み量が1行か8KBに制限するか、の違いですね。(1行が1MBだったときとかを考慮すると大きな違いでしょ)

#この辺はPerlがCに酷似しているおかげで分かるだけです。Perlに特有の表現をする辺りは辛いです。 (^^;

Masa 2000/06/10(土) 18:59:31
掲示板みたいに、1行ずつ処理した場合、
  while (read(LOG,$_,8192))
みたいに、出来ませんよね?

1行ずつ処理する時にメモリを節約する方法ってありますか?

Fuji.♪ [E-Mail] [HomePage] 2000/06/11(日) 11:43:40
インデックスファイルを作って必要なところへ直接シークして読みに行くとか。
データ全部を読み込むよりも、インデックスファイルだけ読み込めば良いし。

インデックスファイルも固定長レコードタイプにしておけば、「○番目の書き込みの場所」を拾うのも簡単。

他にもいろいろあるでしょ。

ぷに辻 2000/06/11(日) 14:41:28
Fuji.♪さん
↑のやつ詳しく教えていただけますか。
ちょっと興味あります。

Fuji.♪ [E-Mail] [HomePage] 2000/06/12(月) 02:21:19
これ以上何を詳しく書いたら良いのか分からないのですが、ご自分の望むデータに沿った形式でインデックスファイルを設計してご利用されれば宜しいのでは?

B-Cus 2000/06/12(月) 18:32:06
というか、
> 1行ずつ処理する時にメモリを節約する方法ってありますか?
ない、が答えでしょう。どうせ1行分だけは必ずメモリ上に
置いておかなければならないのだし。

Fuji.♪ [E-Mail] [HomePage] 2000/06/12(月) 20:07:05
私のやり方の場合、メモリ節約というよりも、平均すると短時間で任意のメッセージにアクセスする、ですね。そういえば。(苦笑)

[上に] [前に] [次に]