0

同じサーバー上のさまざまなページに対して約650万回の呼び出しを行う必要があるプログラムをJavaで作成しています(テキストファイルから読み取られるユーザー名を追加することにより、URLがわずかに変更されます)..まず、最も知りたいことこれを行う時間効率の良い方法、第二に、これがどれくらいの時間を消費するかについて誰でも推測できますか?? 現在、ExecutorServiceオブジェクトの個別のスレッドで各URLを読んでいます..このようなもの

ExecutorService executor = Executors.newFixedThreadPool(10);
Runnable worker = new MyRunnable(allUsers[n]);
executor.execute(worker);

run メソッドは次のようになります。

is = url.openStream();  // throws an IOException
br = new BufferedReader(new InputStreamReader(is));


while ((line = br.readLine()) != null) {
    page = page + line;

    // More code follows

}

どんな提案でも大歓迎です

4

2 に答える 2

0

これにかかる時間を予測することは不可能であり、「一括転送」リクエストを使用するとパフォーマンスが向上する可能性が高いという他のコメントと回答に同意します。

さらにいくつかのポイント:

  • Web ページの代わりに JSON または XML を返す RESTful API を使用できれば、その方が高速になります。

  • クライアント側では、取得するドキュメントが大きい場合、これは効率的です。

        while ((line = br.readLine()) != null) {
            page = page + line;
        }
    

    それは過剰な量のコピーを行うことになります。より良いアプローチはこれです:

        StringBuilder sb = new StringBuilder(...);
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
        page = sb.toString();
    

    ページ サイズを適切に見積もることができる場合は、そのサイズのページを作成しますStringBuilder

于 2014-08-09T16:11:11.230 に答える