Bonjour,
J'ai commencé à écrire un petit client pour récupérer des fichier et lire des articles sur les newsgroups et parcourir les groupes à la main. J'utilise commons/net pour accéder au newsgroups, et ça marche plutôt bien, mais je suis confronté à des problèmes de mémoire.
Déjà, mon interface graphique fait presque 30 Mo alors qu'elle est vide, j'hallucine
(le java du bas c'est netbeans, celui du haut mon programme, NewsMotte)
Mais bon c'était pas pour ça que je venais sur le forum.
Mes deux interrogations sont les suivantes :
D'une part, comment je peux gérer mon groupe de socket (vu que les fournisseurs d'accès aux news autorisent plusieurs connexions simultanées). De ce que j'ai lu, un sémaphore qui utiliserait autant de 'jetons' que de connexions serait adapté, mais comme je ne m'en suis encore jamais servi je voulais savoir si c'était une bonne idée ?
D'autre part, en ce moment j'étais entrain de faire l'exploration des groupes, donc je peux lister tous les groupes, en sélectionner un et afficher son contenu. Le détail c'est qu'il y a quand même un sacré paquet de groupes (plus ou moins 70000 en comptant les groupes vides) et un sacré paquet d'articles surtout dans les gros groupes et vu que je charge tout en mémoire puis je l'affiche, ça fait beaucoup beaucoup trop de mémoire utilisée : / Genre je peux pas afficher le contenu de deux ou trois groupes simultanément sinon je dépasse 1Go d'utilisation de ram : /
Je commence donc à me dire qu'il faudrait peut être les stocker sur le disque dur plutôt que dans la ram, mais je ne sais pas trop comment faire ça pour que les perfs et la conso mémoire restent acceptables. J'ai fait quelques essais avec grabIt, et visiblement il sauvegarde tous les headers dans un fichier et les affiche en lisant directement depuis le fichier car il ne dépasse même pas 12Mo de consommation mémoire(alors que les headers peuvent dépasser 200 Mo).
Edit :
Concernant la mémoire occupée lors du traitement de la liste de groupe et/ou des articles, je pense qu'il faut jouer avec RandomFileAccess et/ou avec la sérialisation. Mais je sais pas encore comment ...
Partager