我在StackO
的幫助下寫了這個方法,但是我一直無法找到一個改進的地方。從收件箱下載附件時,如何減少EWS呼叫?
現在,我遍歷Office 365收件箱中的每條消息,遍歷其附件集合,並將每個文件保存到磁盤(如果它是Excel工作簿)。目前這項工作正在進行中,但會導致大量的Exchange調用。收件箱的大小可能變得非常大,因此需要很長時間才能運行,每次通話時間大約爲0.5秒。
如果我已經計算正確,則調用的數量標度爲(n/100)+ 2n。
- n是消息的收件箱中的數量(每個消息2個呼叫)
- 100是pageSize的,因爲我還沒有看到任何比這大(一個呼叫的每一頁)
注意:通常(99.9999%)每條消息只有一個附件,但爲CYA目的添加了內部循環。可能會造成一些內存開銷,但很少或者沒有縮放因子。
我想知道是否有更好的方法,用更少的Web服務調用。是否有EWS方法可以下載批量附件?我對EWS很新,所以我確信我在這裏缺乏理解。 我想要做的是減少pageSize
和Load(path)
一批文件到磁盤,減少規模。
爲下面的代碼改進任何建議,相對於減少EWS來電,將不勝感激。
public void SaveAttachmentsFromInbox(string[] extensionFilter = null)
{
// Default to excel files
extensionFilter = extensionFilter ?? new[] { ".xls", ".xlsx" };
// Config for traversing inbox
int offset = 0;
int pageSize = 100;
ItemView view = new ItemView(pageSize, offset, OffsetBasePoint.Beginning);
view.PropertySet = PropertySet.FirstClassProperties;
FindItemsResults<Item> findResults;
// Loop through the inbox
// and save all attachments of the designated file types
bool more = true;
var fileCount = 0;
while (more)
{
findResults = service.FindItems(WellKnownFolderName.Inbox, view);
// Load each sheet's data into an Object
foreach (var item in findResults.Items)
{
//get FirstClassProperties
item.Load(view.PropertySet);
string vendor = GetVendor(EmailMessage.Bind(service, item.Id));
messageIds.Add(item.Id.ToString());
// Save files to disk
foreach (FileAttachment file in item.Attachments)
{
string fileExtension = file.Name.Substring(file.Name.IndexOf('.'), file.Name.Length - file.Name.IndexOf('.'));
if (extensionFilter.Contains(fileExtension))
{
var fullPath = Path.Combine(path, file.Name);
attachmentInfo.Add(fullPath, vendor);
// Loads attachment and saves to disk
file.Load(fullPath);
fileCount++;
Console.Write("\rFiles received... {0} ", fileCount);
}
}
}
Console.WriteLine(); // Next line
more = findResults.MoreAvailable;
// Page through inbox if more messages remain
if (more)
{
view.Offset += pageSize;
}
}
Console.WriteLine(attachmentInfo.Count + " Excel Attachment Downloads successful.\n");
}
這就是我一直在尋找的東西。謝謝! – CaptainMarvel