Dateien lesen

port29

deus.Server
Hallo Leute,


ich habe da ein kleines Performance Problem mit Java. Ich habe ein Programm gebaut, dass eine Vorschaufunktion von Bildern macht. Das Programm bekommt über eine XML Datei vom Server eine Liste mit URLs, liest diese ein, erstellt die Thumbnails der Bilder - sofern diese noch nicht vorhanden sind - und zeigt die Bilder in einer JList. Hier ist der Quelltext, der extrem langsam läuft:



Code:
ImgData[] images;
					images = new ImgData[URLlist.size()];
					for(int i=0;i<URLlist.size();i++){
						
					        images[i]= new ImgData(Tools.imgCache(URLlist.get(i).URL),URLlist.get(i).Filename);

					}

	public static BufferedImage imgCache(String address){
		BufferedImage thumbImage=null;
		try{
		URL url;
		url = new URL(address);
		String encURL=URLEncoder.encode(address, "UTF-8");
		
		String CacheDir="cache/";
		File CDir = new File(CacheDir);
		String Location=CacheDir+encURL;
		if (CDir.isDirectory()) {
			File CacheFile = new File(Location);
			if(CacheFile.isFile()){
				//Tools.MessageBox("bla");
				return ImageIO.read(CacheFile);
			}else{
				BufferedImage img = Tools.Thumb(address);
				Tools.SaveThumbImg(Location, img);
				return img;
			}
		}else{
			CDir.mkdir();
			BufferedImage img = Tools.Thumb(address);
			Tools.SaveThumbImg(Location, img);
			return img;
		}
		

		} catch(Exception e){
			e.printStackTrace();
		}

		return thumbImage;
	}

Besonders unter Windows ist die Performance unter aller Sau, auch dann, wenn nicht vom Online Server geladen wird, sondern aus dem lokalen cache der Festplatte mit ImageIO.read(CacheFile);

Kann mir jemand von euch sagen, woran das liegen kann und was ich anders machen muss, damit alles schneller läuft?
 
Schneller bekommen würdest Du's, wenn Du bereits kleine Bildchen jedes Bildes hättest, das geht natürlich nur, wenn Du immer die gleichen Bilder hast. Um Deinen Performance-Engpaß rauszufinden, würde ich mal paar Debug-Ausgaben mit System.currentTimeMillies() setzen, dann weißt Du wo's hakt. Was ist das dann für eine Tools-Klasse?
 
Hi,

die Tools Klasse habe ich selbst geschrieben, sie enthällt verschiedene Tools, die man so brauchen kann. Hier jetzt als Beispiel, dass ein Bild nicht direkt vom Server geholt wird, sondern dass zuerst geschaut wird, ob es das Bild nicht schon im cache auf der Platte gibt.

Klar, beim Laden der großen Bilder direkt vom Server kann es leicht zu Engpässen kommen, aber ich habe ja das ganze umgangen, indem ich die Bilder runterlade, diese verkleinere und anschließend im cache speichere, sodass diese bei einem erneuten Aufruf sofort da sind.

Aber ich muss mich für den Tipp mit der Zeit bedanken. Ich habe nun herausgefunden, dass das Problem an zwei Stellen existiert. Einerseits ist es das Einlesen der Datei - wie ich es bereits vermutet habe, andererseits ist es das Parsen der XML Datei.

Aber dummerweise tauchen beide Probleme "nur" bei Windows Vista auf. Mein Windows XP, dass bei mir auf dem Notebook unter VMware läuft, braucht pro Bilddatei etwa 5-10ms. Unter Vista liegen die Werte bei 100-150ms (ja, ich habe überprüft, es ist wirklich die gleiche Aktion, die ausgeführt wird - die auf der Festplatte liegenden Bilder einzulesen).

Woran kann das denn liegen?
 
Zurück