0

Javaで以下を最適化する方法を知りたいです。私はAndroidフォンでそれをしたいので、メモリに入れられる量が少ないほど良い.

1 つの列で構成されるレコード セットを取得します。この列には、バイナリ データがバイト配列で保持されます。これは私が遊んだことがないものです。

バイナリ データの情報の構造は、次の場所にあります: BLOB

SRID と MBR をスキップしたいのですが、ENDIAN、CLASS TYPE、および実際のジオメトリ データが必要です。

この質問では、ジオメトリ データの実際の処理はそれほど重要ではなく、データを取得する方法とデータを高速に取得する方法が重要です。

Stmt stmt = local_db.prepare("Select geometry From Parcel");
while (stmt.step()){
    //stmt.column_bytes(0) holds the byte array
    //this could be used with a ByteArrayInputStream or perhaps a ByteBuffer
    //maybe something else, what ever would be faster??
    //
    //Next would be the proccessing of the byte array to get the values out.
    //Switch (ENDIAN){
    //  case 0 :
    //    
    //  break;
    //  default:
    //     
    //}
}
stmt.close();

最終的に、これらのシェイプはレンダラーに直接渡されるので、メモリに何も保持する必要はありません。それは先を行っていますが、最終的にどのように使用するかを確認するのに役立つかもしれません.

4

1 に答える 1

0

「可能な限り最速の方法」がどうなるかを予測することは不可能だと思います。ただし、それはおそらく成功の主要な基準であってはなりません。

実際に必要なのは、十分に高速に動作するアプリケーションです。このコンテキストでは、アプリケーションのパフォーマンスには、データベース クエリを実行し、結果を Java ヒープにフェッチするのにかかる時間が含まれます。(またはファイルから読み取る...)

したがって、次のアプローチをお勧めします。

  1. 簡単に書いてください。
  2. 単体テストを書きます。
  3. 単体テストを使用して徹底的にテストし、バグを修正します。
  4. 現在のコードの速度を測定するために使用できるベンチマーク/サンプル データを作成します。
  5. コードでベンチマークを実行します。
  6. それは十分に速いですか?はいの場合は、停止します。
  7. コードをプロファイリングして、ボトルネックがどこにあるかを判断します。
    • ボトルネックがデータベースにある場合は、データベース スキーマとクエリの最適化に取り組みます...
    • ボトルネックが Java 側にある場合は、その最適化に取り組みます。
  8. ステップ 3 に進み、「最適化」が役に立ったかどうかを確認します。

一般に、ボトルネックになっているコード/実装の領域のみを最適化する価値があります。例外もありますが (つまり、本当に才能のあるプログラマーなど)、ほとんどの開発者は、実際のボトルネックがどこにあるかについて特に正確な直感を持っていません。また、コードの特定の領域がボトルネックであることを認識していない場合、最適化に費やした労力が時間の無駄になる リスクがあります。

于 2013-06-25T07:55:50.067 に答える