私は何百万ものメッセージの大きなメールボックスを持っています。私は添付ファイルを持っているかどうかにかかわらず、それぞれのmessgeについて学ぶだけです。 (興味のないサイズ、名前、添付ファイルの数、真の偽のみで十分です)。このコードを使用してプロファイラツールでモニタすると、message.getContent()がメモリを消費してクリアされないことがわかります。数百万のメッセージを処理するため、メモリ不足の問題が発生します。理由は、getContent()メトーがいくつかのデータをキャッシュして保持するからです。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