2017-08-04 1 views
1

Je développe un complément Outlook dont le but principal est de collecter des données de réunion. Naturellement, cela signifie que je dois boucler quelques réunions! Donc, je fais cela et commence à obtenir des valeurs de propriété hors des objets de réunion. À ce stade, les choses commencent à ralentir. Selon Performance Profiler de VS, obtenir une référence à AppointmentItem.ResponseStatus prend 20% de la puissance de traitement. Voici un code:Obtenir les propriétés d'un Outlook.AppointmentItem est très lent

//Setting meetingItem in this loop accounts for 38% of CPU usage. 
for (Outlook.AppointmentItem meetingItem; (meetingItem = calendarItems.GetNext() as Outlook.AppointmentItem) != null;) 
{ 
    //I do this instead of using Outlook.Items.Restrict() because Restrict() was EVEN SLOWER but this line is still 27% of CPU usage. 
    if (DateTime.Compare(meetingItem.Start, start) <= 0 || DateTime.Compare(end, meetingItem.Start) <= 0) 
    { 
     Marshal.ReleaseComObject(meetingItem); 
     meetingItem = null; 
     continue; 
    } 

    MeetingData data = new MeetingData(); 

    data.Subject = meetingItem.Subject; // This line is fine for some reason. Maybe because it's a string? 

    Outlook.OlMeetingStatus meetingStatus = meetingItem.MeetingStatus; // As is this one 
    Outlook.OlResponseStatus responseStatus = meetingItem.ResponseStatus; // 20% 

    //After this point we continue harvesting data but with no more speed issues getting properties. 
} 

Quelques infos supplémentaires:

  • Les listes Générateur de profils de performance tous les éléments lents que les appels à une fonction appelée dynamicClass.IL_STUB_CLRtoCOM
  • J'ai essayé plusieurs autres méthodes pour la boucle inclure une foreach sur l'objet Recipients, une boucle for en utilisant Recipients.Count et en utilisant une boucle while. Le courant pour la boucle s'est le mieux comporté (techniquement le temps a fait, mais le pour est préférable pour d'autres raisons).
  • J'utilisais initialement Outlook.Items.Restrict() pour limiter la plage de recherche entre start et end mais c'était encore plus lent.

J'ai juste besoin d'aide pour me débarrasser de ces goulots d'étranglement car ceux-ci freinent vraiment la vitesse de l'add-in.

+0

Êtes-vous Boucler dans tous les éléments dans un dossier? Utilisez Restrict. –

Répondre