JavaMail IMAP sur SSL assez lente en Vrac de l'extraction de plusieurs messages

Je suis en train d'essayer d'utiliser JavaMail pour obtenir des e-mails à partir des serveurs IMAP (Gmail et autres). Fondamentalement, mon code fonctionne: j'ai en effet peut obtenir les en-têtes, le contenu du corps et ainsi de suite. Mon problème est le suivant: lorsque l'on travaille sur un serveur IMAP (sans SSL), il prend essentiellement en 1-2ms pour traiter un message. Quand je vais sur un serveur IMAPS (donc avec SSL, comme Gmail) je atteindre environ 250m/message. J'ai SEULEMENT de mesurer les temps lors du traitement des messages (la connexion, la poignée de main et ne sont PAS pris en compte).

Je sais que, depuis cela est SSL, les données sont cryptées. Cependant, le temps de déchiffrement doit pas être si important que cela, devrait-il?

J'ai essayé la plus grande ServerCacheSize valeur, une plus grande connectionpoolsize, mais je suis sérieusement à court d'idées. La personne aux prises avec ce problème? Résolu l'on pourrait espérer?

Ma crainte est que l'API JavaMail utilise une connexion différente à chaque fois qu'il récupère un mail depuis le serveur IMAPS (concernant les frais généraux pour l'établissement de liaisons...). Si oui, est-il un moyen de remplacer ce comportement?

Voici mon code (bien que tout à fait standard) appelé à partir de la méthode main() de la classe:

 public static int connectTest(String SSL, String user, String pwd, String host) throws IOException,
                                                                               ProtocolException,
                                                                               GeneralSecurityException {

    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", SSL);
    props.setProperty("mail.imaps.ssl.trust", host);
    props.setProperty("mail.imaps.connectionpoolsize", "10");

    try {


        Session session = Session.getDefaultInstance(props, null);

        //session.setDebug(true);

        Store store = session.getStore(SSL);
        store.connect(host, user, pwd);      
        Folder inbox = store.getFolder("INBOX");

        inbox.open(Folder.READ_ONLY);                
        int numMess = inbox.getMessageCount();
        Message[] messages = inbox.getMessages();

        for (Message m : messages) {

            m.getAllHeaders();
            m.getContent();
        }

        inbox.close(false);
        store.close();
        return numMess;
    } catch (MessagingException e) {
        e.printStackTrace();
        System.exit(2);
    }
    return 0;
}

Merci d'avance.

  • Remarque: la Chaîne SSL est soit "imap" ou "imap". Aussi, j'ai lu la question stackoverflow.com/questions/2538481/javamail-performance mais ils ont essayé sur un serveur IMAPS qui n'est pas Gmail et je suis toujours à obtenir les mêmes résultats.
  • Est-ce possible avec d'autres clients (Thunderbird, Outlook, qu'est-ce-avez-vous) sur le même IMAP/IMAPS serveur? Dans ce cas, ce ne serait pas votre code de la faute, et plutôt un problème de serveur.
  • Comment puis-je mesurer le temps Thunderbird prend pour importer les messages? (nous sommes dans la mme zone...). Il charge tous les dossiers en moins de 20 secondes (mais je ne sais pas si il a obtenu seulement quelques informations et reçoit le reste, quand je clique sur le message).
  • Hmm, c'est un peu gênant, oui. Je crois qu'il a une sorte de journal des opérations (désactivé par défaut), mais la résolution sera en quelques secondes tout au plus. Vous pouvez configurer la TUBERCULOSE pour télécharger les messages (il ne reçoit que des en-têtes par défaut), puis à mesurer l'ensemble de la boîte de réception, ce qu'il faudrait au moins savoir si il faut < 1 sec, ou de plusieurs secondes.
  • Quel est votre système d'exploitation?
  • Ubuntu 11.04 @Piskvor: encore travailler sur ces journaux pour vous donner une réponse précise.
  • Ok, désolé pour l'attente (Thunderbird journal de ne pas activer l'horodatage par défaut...). Pour un message, le contenu du corps récupérée sous thunderbird, voici les horodateurs: 2011-11-30 08:47:10.360004 UTC (commencer à chercher) ... 2011-11-30 08:47:10.360922 UTC - -1989445888[7f5b7e04a150]: 7dcba000:imap.googlemail.com:S-BOÎTE de réception:STREAM:FERMETURE: Normal Message de Téléchargement de Fin de Flux 2011-11-30 08:47:10.385466 UTC - -1989445888[7f5b7e04a150]: ReadNextLine [stream=8cdc70e0 nb=56 needmore=0] Donc, soit 25ms ou 1ms pour obtenir le corps du message...

InformationsquelleAutor Justmaker | 2011-11-30