Autor Beitrag
erfahrener Neuling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Di 05.04.16 10:37 
Hallo malwieder,

ich habe vor kurzem angefangen, ein Programm, welches Emails von einem Exchange-Server abholen soll, zu schreiben. Das Abrufen aller Emails hatte schonmal funktioniert (auch wenn es nicht gerade schnell war, aber noch ok). Nun brauchte ich aber noch einen Searchfilter, der den Betreff nach einem Bestimmten Wort filtert. Seit ich diesen in die Abfrage eingebunden hab, braucht das Programm unglaublich lang, um die Emails abzurufen (bisher musste ich jeden Versuch nach mehreren Minuten Freeze abbrechen).

Hier der Code dazu:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
public void GetEmails()
{
  ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

  service.Credentials = new WebCredentials(Tools.removeEnding(this.username, '@'),this.password, this.domain);
  service.TraceEnabled = true;
  service.TraceFlags = TraceFlags.All;

  try
  {
        
    service.AutodiscoverUrl(this.username, RedirectionUrlValidationCallback);

    SearchFilter.ContainsSubstring searchFilter = new SearchFilter.ContainsSubstring(ItemSchema.Subject, this.KeyWord,ContainmentMode.Prefixed,ComparisonMode.Exact);
    ItemView view = new ItemView(10);

    PropertySet props = new PropertySet(BasePropertySet.FirstClassProperties);
    props.RequestedBodyType = BodyType.Text;
        
    view.PropertySet = props;
    FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);


    foreach (Item item in findResults.Items)
    {
      EmailMessage message = EmailMessage.Bind(service,item.Id,props);

      message.Load(props);

      this.subjects.Add(message.Subject);
      this.bodies.Add(message.Body);
      this.senders.Add(message.From.ToString());
            
    }
  }
  catch (Exception E)
  {
    MessageBox.Show(E.Message,"FEHLER");
  }
}


Da ich mit dem Exchange Web Service nicht wirklich auskenne, habe ich mir den größten Teil aus im Internet gefunden Sachen zusammengebaut.

Ihr habt doch bestimmt ein paar Tipps für mich, wie man das Optimieren/komplett Umändern könnte.

Danke im Vorraus :)

EDIT: ok jetzt braucht das ganze nicht mehr ganz so lang (ca. 51 sek). Wer weiß was heute früh mit dem Server los war, dass es fast 10min gebraucht hat.

Moderiert von user profile iconChristian S.: Topic aus Sonstiges (.NET) verschoben am Di 05.04.2016 um 10:49