6

ちょっとstackoverflowコミュニティ!

非常に複雑なアルゴリズム プログラムが使用している CPU 使用率が 3 ~ 4% と非常に低いという問題があります。結果が返るまでに非常に時間がかかり、十分に機能していないと思います。

あなたの天才は、なぜこれが起こるのか考えていますか - どちらかと言えば、100% の使用率を期待します. 追加の詳細の1つは、プログラムがsqlite3データベースに挿入することです。したがって、はい、sqlite3jdbcライブラリを介して多くのJNI呼び出しがあると思います。(以前に PreparedQuery バッチを使用してこれらの挿入を延期したかったことに注意してください。ただし、これにより重大なメモリの問題が発生しました。データが大量にあります)。

前もって感謝します

更新: 修正済み。ええ、私は馬鹿げたことをしていましたが、sqlite が新しいトランザクションを開始して、それほど多くのオーバーヘッドを行うとは思っていませんでした。

私は現在、PreparedStatement を使用し、挿入前に 32768 エントリをキューに入れています。私には十分な数のように思えました。

4

4 に答える 4

4

タイプ IV の 100% Java バージョンが利用可能な場合、JNI で JDBC ドライバーを使用することは決してお勧めしません。Googleはこれを見つけまし

それはさておき、これ以上の情報がないと何とも言えません。アプリとデータベースは同じハードウェアで実行されていますか?

INSERT の何がそんなに「集中的」なのですか?

推測ではなく、プロファイリングして実際のデータを取得することをお勧めします。信仰ベースのコンピューティングは、私にとっては決してうまくいきません。

于 2009-01-11T23:19:58.683 に答える
1

明らかに、データベース呼び出しが遅延を引き起こしています。より小さなバッチを作成し、それが役立つかどうかをテストすることはオプションではありませんか?? アルゴリズムを並列化して、結果を取得するキューをどこかに配置し、別のスレッドがそのキューを消去することもできますか?

編集:

他にもいくつかの問題領域があります。

  • データベースの最適化 (モデル)
  • データベース サーバーの構成
  • ディスク速度

これらすべての要因を考慮に入れる必要があります

于 2009-01-11T23:17:49.920 に答える
1

大量のデータを書き込んでいる場合は、ディスクにバインドされている可能性があります。マシンのディスク io 統計を見て、それが実際にボトルネックである場合は、io が優れているハードウェアを見つけるか、書き込みを減らす方法を見つけてください。

于 2009-01-11T23:18:11.340 に答える
0

ディスクがアプリの速度を低下させています。INSERTS はディスクを使用し、ディスクは低速であり、OS は書き込み操作が完了するまで待機する必要があります。

アルゴリズム用と挿入用の 2 つのスレッドを使用できませんか? 挿入のみを行う場合は、テキスト ファイルに書き込み、後で実行することもできます。

于 2009-01-11T23:38:46.447 に答える