我有一個包含數百萬條消息的大型郵箱。我只想學習每個問題,不管它是否有附件。 (不感興趣的大小,名稱,附件數量,只有真假是足夠的)。當我使用此代碼並使用Profiler工具進行監視時,我看到message.getContent()消耗內存並且沒有清除它。由於處理數百萬條消息,會發生內存不足問題。原因是,getContent()methot緩存一些數據並保留它。Java,IMAP,檢查消息是否具有附件而不提取
什麼是此代碼的替代品,而無需致電getContent? 或者我如何強制清除由getContent設置的緩存? 如何申請message.writeTo()這種情況?
//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;
也許你可以通過看到或看不見的消息來減少消息。示例:http://stackoverflow.com/questions/12988799/javamail-check-message-content-gmail-imap –
因爲一些商業規則,我需要他們全部。我只提取標題(主題,來自等)並忽略正文,附件沒有任何內存或性能問題。但我只需要有附件或沒有。當用戶稍後選擇任何消息時,獲取正文和附件。 – benchpresser