mosuradazoのプロフィール
- ベストアンサー数
- 6
- ベストアンサー率
- 60%
- お礼率
- 0%
- 登録日2003/12/01
- 明示的なオブジェクトの削除
以下の様なコードを用いてthreadを走らせています。 my $cond = 0; while($cond == 0){ { my $thread; my @threads; my $index = 0; while ($index < @param1){ $thread = threads->new(\&func, $param1[$index++], $param2); push @threads, $thread; } sleep(1); while (@threads > 0){ $thread = pop @threads; $thread->join(); } } condcheck(); } 条件が満たされるまで、一定の処理を行うthreadを複数走らせるというものなのですが、 これを実行すると、perlの使用しているメモリがどんどん増えて行っているのを確認しました。 #@threadsや$threadのスコープが外れるようにしているのになぜ? newしたthreadオブジェクトを、明示的に削除したいのですが、どのようにすればよいでしょうか?
- データ分割 正規表現だけで可能?
都合のいい質問だと分かってて質問しています。 今、データの読み込みプログラムを作っています。 件数は12万件(11MB)です。 ・データはCSV形式になっており、区切りはカンマです。 ・"" で囲まれたカラムとそうでないカラムがあり、"" で囲まれたカラムの一部には、データとしてカンマが含まれていることがあります。 ・また、データにはエスケープシーケンスを含むことが許されており、 \" という文字は囲み記号であると認識してはいけません。 このようなルールのとき、 @data = split( /,/, $line ); というロジックでは分割できませんよね。 なんで、物凄い複雑なロジックで分割を行う xsplit という独自の関数を作って分割しています。 ところが、1行ごとにこの xsplit を使用しなければならないため、データが12万件もあると、読み込みだけで15~18秒もかかってしまいます。( split だと3秒で終わります) で、少しでもこの時間を縮めるために、上記のルールを崩さずに split の /,/ の部分を変更するだけで分割を行うことはできないもんでしょうか。 何か思いついた方がいらっしゃいましたら、よろしくお願いします。 (ちなみに拡張モジュール類などの、環境によって動いたり動かなかったりするような物は使えないということでお願いします)
- ベストアンサー
- Perl
- noname#25358
- 回答数3
- 明示的なオブジェクトの削除
以下の様なコードを用いてthreadを走らせています。 my $cond = 0; while($cond == 0){ { my $thread; my @threads; my $index = 0; while ($index < @param1){ $thread = threads->new(\&func, $param1[$index++], $param2); push @threads, $thread; } sleep(1); while (@threads > 0){ $thread = pop @threads; $thread->join(); } } condcheck(); } 条件が満たされるまで、一定の処理を行うthreadを複数走らせるというものなのですが、 これを実行すると、perlの使用しているメモリがどんどん増えて行っているのを確認しました。 #@threadsや$threadのスコープが外れるようにしているのになぜ? newしたthreadオブジェクトを、明示的に削除したいのですが、どのようにすればよいでしょうか?
- 明示的なオブジェクトの削除
以下の様なコードを用いてthreadを走らせています。 my $cond = 0; while($cond == 0){ { my $thread; my @threads; my $index = 0; while ($index < @param1){ $thread = threads->new(\&func, $param1[$index++], $param2); push @threads, $thread; } sleep(1); while (@threads > 0){ $thread = pop @threads; $thread->join(); } } condcheck(); } 条件が満たされるまで、一定の処理を行うthreadを複数走らせるというものなのですが、 これを実行すると、perlの使用しているメモリがどんどん増えて行っているのを確認しました。 #@threadsや$threadのスコープが外れるようにしているのになぜ? newしたthreadオブジェクトを、明示的に削除したいのですが、どのようにすればよいでしょうか?
- 明示的なオブジェクトの削除
以下の様なコードを用いてthreadを走らせています。 my $cond = 0; while($cond == 0){ { my $thread; my @threads; my $index = 0; while ($index < @param1){ $thread = threads->new(\&func, $param1[$index++], $param2); push @threads, $thread; } sleep(1); while (@threads > 0){ $thread = pop @threads; $thread->join(); } } condcheck(); } 条件が満たされるまで、一定の処理を行うthreadを複数走らせるというものなのですが、 これを実行すると、perlの使用しているメモリがどんどん増えて行っているのを確認しました。 #@threadsや$threadのスコープが外れるようにしているのになぜ? newしたthreadオブジェクトを、明示的に削除したいのですが、どのようにすればよいでしょうか?