1

基本的に画像ギャラリーであるJavaFXアプリケーション(Swingユーザーの入力も役立つ場合があります)があります。フォルダを監視し、画像が追加されるとすぐに画像が画面に表示されます。

より多くの画像が追加されるとすぐに、アプリケーションのメモリ消費量は増加するだけでした. プロファイリングでは、イメージ (サイズ 1.3 MB) を追加すると、メモリ消費量が約 50 MB 増加することがわかりました。Image を保持するクラスはImageViewImage. 似たような経験をした人はいますか?動作は Windows と Mac で同じです

PS: ここのコードが役立つことはわかっていますが、表示されるものはあまりありません。私が言ったように、Image を保持する ImageView のリストがあります。ImageView のリストは、別のListsayにバインドされていますl1。画像を検出すると、画像が追加l1され、画面に表示される実際のリストに追加されます

編集:

サンプルコードを試してみました。Iamge が読み込まれるたびに (この場合は 2.3 MB)、メモリがそれぞれ 12 MB 増加することがわかりました。

package side;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ScrollBar;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Test extends Application {

public static void main(String... args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    ScrollBar bar = new ScrollBar();
    bar.setOrientation(Orientation.VERTICAL);


    final VBox box = new VBox();
    Group root = new Group();
    root.getChildren().addAll(box, bar);
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.setTitle("Layout Sample");
    primaryStage.show();


    for (int ik = 0; ik < 6; ik++) {
        System.out.println("1");
        ImageView i = new ImageView();
        InputStream is = new FileInputStream(new File("C:\\Users\\Jatin\\Documents\\BarcodeNew\\w.png"));
        Image im = new Image(is);
        i.setImage(im);
        box.getChildren().add(i);
        is.close();
    }

    //r.close();


}

}

4

1 に答える 1

1

2 つの問題が見つかりました:

  1. ストリームを閉じていませんでした。
  2. これから_

PNG 画像のファイル サイズとメモリ内の圧縮されていない画像のメモリ消費量は大きく異なることに注意してください。

サイズを指定すると、Imageすべてうまく機能します。

于 2013-02-15T09:47:57.437 に答える