- - PR -
ファイルの中の文字列検索の速度向上
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-19 18:25
うろ覚えで変なこと言ってしまったみたいで申し訳ありません……。sunのjavadocくらい読んでから書くべきでした(猛省 読むと「むしろbuffer.toString()の方が良い(=速い)」ようですね。 ---
劇的に速くなりましたね。おめでとうございます。 遅かった主原因はStringの連結だった……ということのようですね。 今回はたまたま早期解決して良かったのですが、きっちりとボトルネックを洗い出してそれを地道に潰していく……等も実践出来るように頑張ってください。 とりあえず、部分部分で問題を特定→解決出来るように、意味を持った処理ブロックは随時小さく切り出すのがお勧めです。 | ||||||||
|
投稿日時: 2005-04-19 18:47
>未記入 様
目標値は 18万件から検索する際には 3秒。 遅くとも5秒以内とあります。 検索にかかる時間を検索するにはどうしたらいいのでしょうか? googleのように検索時間をだしたいのですが^^; よろしければ、ご教授ください。 | ||||||||
|
投稿日時: 2005-04-19 18:56
ファイル検索処理前後で、System.currentTimeMillis()で時間を取得して、
その差分が実行時間(若干の誤差はあります)です。 以下のような感じです。 long begin = System.currentTimeMillis(); //ファイルの検索処理開始 //ファイルの検索処理終了 long end = System.currentTimeMillis(); long diff = end - begin; //検索処理実行時間 out.println("検索処理時間:" + diff); java.lang.SystemのAPIを参照してください。 J2SEの基本パッケージを勉強してがんばって下さい。 | ||||||||
|
投稿日時: 2005-04-20 14:59
Java 1.4 では javadoc にも以下のように書かれていて、StringBuffer#toString() で生成された String のインスタンスはバッファが共有(=コピーが起こらない)されるのですが、
なぜか 1.5 ではこの記述が削除され、JDK に付いてくるソースコードも共有されないように変更されています。 なので、1.5 では new String(StringBuilder) の方が良いようです。ちなみに、こちらの方法は 1.4 でも同様で、バッファが共有されます。 それから、1.5 では StringBuilder クラスが追加され、こちらを使うことが推奨されています。(これで、C# と Java でうっかり間違えるミスも減りますね) [ メッセージ編集済み 編集者: きよの 編集日時 2005-04-20 15:00 ] | ||||||||
|
投稿日時: 2005-04-20 15:17
すみません、1.5 では new String(StringBuffer) も new String(StringBuilder) もバッファがコピーされるようですが、ソースコードを見る限りでは StringBuffer#toString() の方が速いように思います。javadoc にも以下のように書かれています。
|
«前のページへ
1|2|3