2009-05-04 8 views
0

J'essaie d'analyser les e-mails dans Outlook 2007. Je dois rationaliser le plus rapidement possible et semble avoir des problèmes.Outlook 2007 MailItem Info - lent

Fondamentalement, il est:

foreach(Folder fld in outllookApp.Session.Folders) 
{ 
    foreach(MailItem mailItem in fld) 
    { 
     string body = mailItem.Body; 
    } 
} 

et 5000 e-mails, cela prend plus de 100 secondes. Il ne me semble pas que cela devrait durer aussi longtemps.

Si j'ajouter:

string entry = mailItem.EntryID; 

Il finit par être 30 secondes supplémentaires.

Je fais toutes sortes de manipulations de chaînes, y compris des expressions régulières avec ces chaînes et j'écris vers la base de données et encore, ces 2 lignes prennent 50% de mon temps d'exécution.

J'utilise Visual Studio 2008

Répondre

1

Faire ce genre de chose prendra beaucoup de temps car vous devez tirer les données du magasin d'échange pour chaque article.

Je pense que vous avez deux options ici ..

traiter ces informations sur l'utilisation de la bande CDO/RDO dans un autre processus. Ou Utilisez MapiTables comme c'est le moyen le plus rapide d'obtenir des propriétés, mais il se peut que vous fassiez des choses dans votre processus qui peuvent être mises dans une table.

wrapper Redemption - http://www.dimastr.com/redemption/mapitable.htm

MAPI Tables http://msdn.microsoft.com/en-us/library/cc842056.aspx

+0

J'espérais éviter d'avoir à acheter des licences supplémentaires, mais c'est certainement une possibilité. Merci! – McAden

+0

CDO est libre MS lib etc www.cdolive.com vous auriez à l'utiliser hors processus bien que vous le code ci-dessus ressemble à OOM. Vous vous connectez pour échanger directement et travailler sur les éléments .. – 76mel

+0

Ooh oublié qu'il ya des perspectives table maintenant en 2007 ... ce moyen le plus rapide pour obtenir des données http://msdn.microsoft.com/fr-fr/library /bb147822.aspx string filter = ""; Outlook.Table inboxTable = inboxFolder.GetTable (filtre, Outlook.OlTableContents.olUserItems); Utilisez un filtre pour sélectionner ce que vous voulez et ne voulez pas. – 76mel

1

Je ne sais pas si cela va résoudre votre problème spécifique, mais le dernier Service Pack Office 2007 fait une différence de performance synificant (amélioration) pour Outlook avec un grand nombre de messages.

+0

Ah, est sorti il ​​y a un peu plus d'une semaine. Essayer. – McAden

+0

5-10% d'amélioration. Avait espéré plus mais c'est quelque chose. Merci pour l'information.J'espérais avoir un autre moyen d'accéder aux éléments de courrier, mais j'ai l'impression que je suis lié par les E/S d'Outlook sur celui-ci. – McAden

0

Êtes-vous juste lire dans ces chaînes dans cette chaîne, ou lisez-vous dans une chaîne, le traiter, puis passer à la suivante? Vous pouvez essayer de lire tous les messages dans un HashTable dans votre boucle, puis les traiter après qu'ils ont été chargés - cela pourrait vous rapporter des gains.

Tout type de mise à jour de l'interface utilisateur est extrêmement coûteux; Si vous écrivez du texte ou que vous incrémentez une barre de progression, il est préférable de le faire avec parcimonie.

+0

En fin de compte pour ce que j'essaie de faire, je suis en train d'analyser et de traiter. Cependant, la question concerne simplement le code ci-dessus. L'affectation pure (mon traitement est commenté) prend environ 100-130 secondes. Avec le traitement, il faut 190 secondes. Tout cela est backend. – McAden

0

Nous avons eu exactement le même problème, même quand les dossiers étaient locaux et il n'y avait pas de retard de réseau.

Nous avons obtenu une accélération de 10x en stockant une copie de chaque e-mail dans une table Sql Server CE locale adaptée à la recherche dont nous avions besoin. Nous avons également utilisé des événements de mise à jour pour nous assurer que la base de données locale reste synchronisée avec les dossiers Outlook/Exchange.

Pour éliminer totalement le retard de l'utilisateur, nous avons retiré la recherche du thread Outlook et l'avons placée dans son propre thread. La perception de retard était pire que le retard réel il semble.

Questions connexes