2

私はX、Y、Zポイントの大きなセットを扱っています。RAMの使用量を低く抑える必要がある場合、すべてのポイントを保存するための最良の方法は何ですか?文字列"X、Y、Z"、カスタムクラス、またはどちらの方法でも違いはありませんか?

4

3 に答える 3

8

文字列はほぼ間違いなく間違った選択です。文字列は、それ以上ではないにしても、約半分のスペースを浪費し、データを処理に適した数値形式に戻すためにCPUサイクルを浪費します。

3つのプリミティブフィールドを持つカスタムクラスの方がはるかに適しています。ポイントの範囲とタイプに応じて、、、、、、、またはを使用byteします。これにより、ポイントを使用するたびに座標を解析する必要がなくなります。shortintlongfloatdouble

于 2012-11-12T03:57:36.053 に答える
2

メモリ使用量を少なくしたい場合は、1つの配列を作成してX、Y、Zを一緒に格納できます。

インデックスがiのポイントの場合、X、Y、Zを次のインデックスを持つ配列要素に格納できます。

  • Xの場合は0+3 * i
  • Yの場合は1+3 * i
  • Zの場合は2+3 * i

編集:このアプローチには、次の重要な利点もあります。これは、状況によっては非常に便利な場合があります。

  • ジオメトリアルゴリズムのすべてのデータをメモリ内の連続した場所に配置し、CPUキャッシュをはるかに効率的にします。
  • 大量の小さなオブジェクトでメモリ管理が煩雑になることはありません。

もちろん、この大きなテーブルをgetX(int index)、少しのCPUコストで読みやすくするようなメソッドを持つクラスでラップすることもできます。

于 2012-11-12T04:04:59.823 に答える
2

なぜ3つの要素を持つ配列ではないのですか?

于 2012-11-12T03:58:12.417 に答える