2016-04-02 2 views
0

Простое требование -> Подсчитайте количество писем, полученных за последние семь дней. Код кажется достаточно простым:Количество просмотров последней почты в Интернете

void CountEmail() 
     { 
      Outlook.Explorer currExplorer = null; 
      Outlook.Folder folder = null; 
      Outlook.Items items = null; 
      Outlook.ContactItem contact = null; 
      string contactList = string.Empty; 
      try 
      { 
       currExplorer = Application.ActiveExplorer(); 
       folder = (Outlook.Folder)currExplorer.CurrentFolder; 

       items = folder.Items; 

       int count = items.Count; // 10082 count 

       IEnumerable<Outlook.MailItem> mail = folder.Items.OfType<Outlook.MailItem>().Where(m => m.ReceivedTime <= DateTime.Now - new TimeSpan(7, 0, 0, 0)).Select(m => m); 

       int itemscount = mail.Count<Outlook.MailItem>(); // out of memory here 
..... 

запрос в почте = ... явно ленивый нагрузки, так как это время не тратится на работу. Последующий вызов - это выполнение, и я заканчиваю или память. Мне не нужен фактический контент, просто счет.

Итак, как получить счет электронных писем, полученных в течение последних семи дней?

ответ

1

Никогда не используйте LINQ with COM - это выглядит круто в коде, но это ужасно с точки зрения производительности. Не говоря уже о том, что вы можете запустить каналы RPC в онлайн-режиме.

Использовать Items.Find/FindNext или Items.Restrict.

+0

Я знаю о .Restrict, но документации Msft действительно не хватает здесь. Я нашел еще одну должность SO, которая помогла, если у других тоже будет эта проблема; http://stackoverflow.com/questions/17169646/microsoft-office-interop-outlook-items-restrict-not-working-correctly – JamieMeyer

Смежные вопросы