IMAP:(JavaMail)获取许多文件夹的未读消息数(性能改进)

时间:2017-06-29 13:33:36

标签: java directory javamail imap message

我们的客户有一个400个文件夹的imap邮件帐户。我们使用java mail api获取邮件。在程序开始时,我们需要每个文件夹的所有未读消息计数

假设我们在字符串数组中有foldernames

String arryFolderNames[] = { "f1", "f2"..

对于每个文件夹:

for (String folderName : arryFolderNames) {
    IMAPFolder imapFolder = MailStore.getFolder(folderName);

    //takes 100-300 milliseconds
    int unreadCount = imapFolder.getUnreadMessageCount();
}

要获取单个文件夹的未读消息计数至少需要100毫秒,整个过程总共需要40秒以上,但客户只需要5-6秒。最多。我必须优化这个过程:

  • 所有文件夹都已关闭,我在已关闭的文件夹上执行 getUnreadMessgeCount 。但是当我在调用getUnreadCount之前检查是否打开文件夹并打开文件夹getUnreadCount并再次关闭时,文件夹打开/关闭进程需要额外的时间,我没有获得任何性能提升。

  • 当我一次打开所有400个文件夹并保持打开状态时,一切都会变慢,并认为始终打开所有文件夹并不是一个好习惯。

  • 当我把folder.getUnreadCount放在不同的Threads中时,(带有10个大小的线程块,或者一个文件夹的1个线程,400个线程,或者有100个文件夹的4个线程等),没有任何收获,处理所有文件夹需要更长的时间。

有任何建议,想法吗?

0 个答案:

没有答案