Application utilise trop de mémoire
Bonsoir,
J'ai une augmantation importante de la memoire ram avec ce code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
[...]
out = new ObjectOutputStream(socket.getOutputStream());
in = new ObjectInputStream(socket.getInputStream());
while (true) {
ImageIcon img = (ImageIcon) in.readObject();
try {
canvas.setBackgroundImage(makeSWTImage(d,img.getImage()));
} catch (OutOfMemoryError e) {
System.gc();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
);
} |
Je fais des captures d'ecran dans une boucle while... La mémoire augemente petit a petit... Je crois avoir trouver le coupable, cette fonction: makeSWTImage(d, img.getImage()) //elle permet de convertire une image AWT en une image SWT
Voici cette fameuse fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
org.eclipse.swt.graphics.Image makeSWTImage(Display display, java.awt.Image ai)
throws Exception
{
int width = ai.getWidth(null);
int height = ai.getHeight(null);
BufferedImage bufferedImage = null;
bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = null;
g2d = bufferedImage.createGraphics();
g2d.drawImage(ai, 0, 0, null);
g2d.dispose();
int[] data = null;
data = ((DataBufferInt)bufferedImage.getData().getDataBuffer())
.getData();
ImageData imageData = null;
imageData = new ImageData(width, height, 24,
new PaletteData(0xFF0000, 0x00FF00, 0x0000FF));
imageData.setPixels(0, 0, data.length, data, 0);
org.eclipse.swt.graphics.Image swtImage = new org.eclipse.swt.graphics.Image(display, imageData);
return swtImage;
} |
Apres plusieurs jours de recherche et de galère j'espère que vous pourrez me donner un petit coup de main ^^
Merci.
Olivier