2016-04-02 52 views
0

Basit bir gereksinim -> Son yedi günde alınan e-posta sayısını say. Kod yeterince basit görünüyor: Hiçbir zaman işi harcanmaktadır olarak postadaSon e-postaların Outlook Analytics sayısı

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 
..... 

sorgu = ..., açıkça bir tembel yüktür. Sonraki çağrı yürütme, ve ben ya da bellek veya tükendi. Asıl içeriği istemiyorum, sadece sayım.

Peki, son yedi gün içinde alınan e-postaların sayısını nasıl elde edersiniz?

cevap

1

Asla LINQ'u COM ile kullanmayın - kodunuzda havalı görünüyor, ancak performans açısından da korkunç. Çevrimiçi modda RPC kanallarının tükenebileceğini belirtmemek.

Items.Find/FindNext veya Items.Restrict'u kullanın.

+0

.Restrict'in farkındayım, ancak Msft belgeleri burada gerçekten eksik. Başkalarının da bu konuya sahip olması durumunda yardımcı olan başka bir SO postu buldum; http://stackoverflow.com/questions/17169646/microsoft-office-interop-outlook-items-restrict-not-working-correctly – JamieMeyer