0

ファイルからデータを読み取り、シーンにレンダリングする JavaFX(8) 3D アプリケーションを作成しました。

オブジェクトのレンダリングには、次を使用します。

graphicsContainer.getChildren().add(some3dObject);

レンダリングを無効にするためにこの行をコメント アウトすると、メモリ リークはまったく発生しません。

しかし、この行が実行されると、アプリケーションはますます多くのメモリを消費します。私は毎秒30フレームで、毎秒メモリ消費量が約50MB増加しています。

これはもちろん、私が使用するフレーム間ではありますが:

graphicsContainer.getChildren().clear();

ローカルに割り当てた 3D オブジェクトはgraphicsContainer、静的/グローバル スコープには保存されません。これらは の子としてのみ保存graphicsContainerされ、すべてのフレームで消去されます。

の子を削除するたびに、JavaFX-3D エンジンの何かが私の作業を実際にクリアしていないようgraphicsContainerです。

JavaFX 3D エンジンに過去の 3D オブジェクトとレンダリングを解放させる方法はありますか?

4

1 に答える 1

0

私のシナリオでは、すべてのフレームに同じ 3D オブジェクトのセットが含まれています。フレームごとに変わるのは、これらのオブジェクトの位置と変形だけです。

私の回避策は、作成した各 3D オブジェクト (Sphere、Cylinder など) をいくつかの配列に保存することでした。その後、毎回Group新しい 3D オブジェクトを作成するのではなく、フレームごとに位置と変換を変更するだけです。

現在、メモリは常に約 220MB です。

于 2016-08-31T18:19:30.300 に答える