Ich habe ein großes Postfach von Millionen von Nachrichten. Ich möchte nur für jede Messe lernen, ob es eine Anhaftung hat oder nicht. (Nicht interessiert Größe, Name, Anzahl der Anhänge, nur wahr falsch ist genug). Wenn ich diesen Code verwende und mit einem Profiler-Tool überwache, sehe ich, dass message.getContent() Speicher verbraucht und nicht löscht. Da es sich um Millionen von Nachrichten handelt, treten Probleme mit dem Arbeitsspeicher auf. Der Grund dafür ist, dass der getContent() -Methot einige Daten zwischenspeichert und speichert.Java, IMAP, prüfen, ob die Nachricht Anhang hat, ohne zu holen
Was ist eine Alternative zu diesem Code ohne Aufruf getContent? Oder wie kann ich erzwingen, den Cache zu löschen, der von getContent gesetzt wird? Wie kann ich message.writeTo() für diesen Fall anwenden?
//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;
Vielleicht können Sie Nachrichten durch gesehene oder ungesehene Nachrichten reduzieren. Beispiel: http://stackoverflow.com/questions/12988799/javamail-check-message-content-gmail-imap –
Ich brauche alle von ihnen wegen einiger Geschäftsregeln. Ich hole nur Header (Betreff, von etc) und Ignoriere Körper, Anhänge ohne Speicher oder Leistungsproblem. Aber ich brauche nur wenn ich Anhang habe oder nicht. Das Abrufen von Text und Anhängen erfolgt, wenn der Benutzer später eine Nachricht auswählt. – benchpresser