我们的客户有一个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个线程等),没有任何收获,处理所有文件夹需要更长的时间。
有任何建议,想法吗?