2013-02-15 43 views
1

我有一个基本上是Image Gallery的JavaFX应用程序(Swing用户输入也可能有所帮助)。它观看一个文件夹,一旦添加了任何图像,图像就会显示在屏幕上。显示图像时内存消耗增加50 MB

随着越来越多的图片被添加,应用程序的内存消耗只会越来越大。在剖析时,我观察到在添加图像(大小1.3 MB)时,内存消耗增加了约50 MB。持有Image的类是一个简单的ImageView,它包含一个Image。 有没有人有类似的经历?在Windows上的行为是相同的& Mac

PS:我知道这里的任何代码都会有帮助,但没有什么需要显示的。正如我所说,有一个ImageView列表包含Image。 ImageView的列表绑定到另一个Listl1。在检测的图像时,图像被添加到l1等被添加到其被显示在屏幕上

EDIT实际列表:

我只尝试了示例代码。我观察到,每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(); 


} 

}

+0

如果您仅使用缩略图进行显示,则无需将图像保存为全分辨率,而是缩小版本。 – 2013-02-15 06:18:40

+0

是的。我会做。但是,对于一个1.3MB大小的图形来说,为什么这么大增加呢? – Jatin 2013-02-15 06:20:39

+0

检查你的代码是否有内存泄漏,分析器会在这里帮助。 – 2013-02-15 06:27:16

回答

1

实测两个问题:

  1. 我没有关闭我的流。
  2. this

请记住,一个PNG图像文件的大小和内存中的未压缩图像的内存消耗有很大的不同。

在指定Image的大小时,它一切正常。