2013-02-15 72 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的大小時,它一切正常。