J'ai une grande boîte aux lettres de millions de messages. Je veux seulement apprendre pour chaque message, qu'il ait ou non un attachement. (Taille non désirée, nom, nombre de pièces jointes, seul le vrai faux suffit). Quand j'utilise ce code et mon moniteur avec un outil de profilage, je vois que le message.getContent() consomme de la mémoire et ne l'efface pas. En traitant des millions de messages, des problèmes de mémoire se produisent. La raison en est que le methot getContent() met en cache des données et les conserve.Java, IMAP, vérifiez si le message a une pièce jointe sans aller chercher
Quelle est une alternative à ce code sans appeler getContent? Ou comment puis-je forcer pour effacer le cache qui est défini par getContent? Comment puis-je appliquer message.writeTo() pour ce cas?
//processing million message instances in a loop i=1, 1000000
Multipart multiPart = (Multipart) message[i].getContent();
for (int i = 0; i < multiPart.getCount(); i++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
// yes, it has an attachment
return true;
}
}
return false;
Peut-être que vous pouvez réduire les messages par des messages visibles ou non. Exemple: http://stackoverflow.com/questions/12988799/javamail-check-message-content-gmail-imap –
J'ai besoin de tous à cause de certaines règles métier. Je ne récupère que les en-têtes (sujet, etc.) et ignore le corps, les pièces jointes sans aucun problème de mémoire ou de performance. Mais j'ai seulement besoin d'un attachement ou non. La récupération du corps et des pièces jointes est effectuée lorsque l'utilisateur sélectionne un message ultérieurement. – benchpresser