Bonjour tout le monde!
Je developpe une application sur J2me avec Netbeans, elle a pour but d'afficher des images au format png qu'un serveur lui envoie.
Je suis confronté à de serieux problemes de performances.
J'ai repris cette application avant, pour la lecture des données (via un InputStream), on lisait octet par octet. Forcement c'etait plus lent, mais par contre ca n'obligeait pas d'allouer un tableau d'octet.
En effet pour faire le lien un ByteArrayOutPutstream et un InputStream, je n'ai trouvé qu'un tableau de byte [].
Dans ma version actuelle, j'alloue ce dernier à une taille maximal 100Ko (les images ne doivent pas depasser cette taille, le maximum qu ej'ai vu c'etait 77Ko).
Je l'utilise donc comme tampon, mon algo :
Mon probleme c'est que mon appli est vraiment trop gourmande, j'ai donc essayé de limité au mieux mes "depenses" en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 -allocation : byte[] tabByte = new byte[1024*100] -ouverture de la connection et des flux -intanciation : ByteArrayOutputStream baStream = new ByteArrayOutputStream() -gestion du protocole .... -reception des images : - lecture segmentée des données, on ne peut pas tout lire en une seule instruction - les données lues à chaque boucle sont stockée temporairement dans tabByte - puis elles sont insérées dans baStream -creation de l'image avec Image.createImage (baStream.toByteArray())
- virant tous les message de debug (consommation de String)
- tous les variables locales qui sont utilisées dans les methodes sont mise à "null"
et j'ai dernierement essayé en lancant moi meme le Garbage Collector avec System.gc(), toutes les 100 images recues.
Dans l'emulateur du WKT25, dans le moniteur de gestion de la memoire, je me retrouve avec un beau signal triangulaire (blagues d'electronicien ), alors que sans j'ai droit à une succession d'exponentielles.
Ma question est simple, est ce que l'on peut / doit faire mieux ?
L'appel au Garbage Collector est-il conseillé?
Merci !
Partager