System.OutOfMemory在使用Exchange Web Server API收集电子邮件时引发的异常



>我在Windows服务源代码中收到以下错误:

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' 
was thrown.
at System.Collections.Generic.List`1.set_Capacity(Int32 value) at 
System.Collections.Generic.List`1.EnsureCapacity(Int32 min) at 
System.Collections.Generic.List`1.Add(T item)

当我尝试使用Exchange Web Server API从收件箱加载电子邮件时。下面是用于对邮箱进行身份验证和读取的代码:

ExchangeService service = new 
ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials("name@domain.co.uk", "*****");
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.AutodiscoverUrl("name@domain.co.uk", RedirectionUrlValidationCallBack);
//retrieve first 50 emails
int offset = 0;
int pageSize = 50;
bool moreEmails = true;
ItemView view = new ItemView(pageSize, offset, OffsetBasePoint.Beginning);
view.PropertySet = PropertySet.IdOnly;
FindItemsResults<Item> findResults;
List<EmailMessage> emails = new List<EmailMessage>();
findResults = service.FindItems(WellKnownFolderName.Inbox, view);
while (moreEmails)
{
foreach (var item in findResults.Items)
{
emails.Add((EmailMessage)item);
}
moreEmails = findResults.MoreAvailable;
if (moreEmails)
{
view.Offset += pageSize;
}
}
PropertySet properties = (BasePropertySet.FirstClassProperties);
service.LoadPropertiesForItems(emails, properties);

我被告知错误位于

电子邮件。添加((电子邮件(项(;

但我不确定如何解决此错误。任何帮助都非常感谢。

在while 循环中滑动对 FindItems 的调用。 没有它,您只需将相同的项目添加到您的集合中,直到内存耗尽。

while (moreEmails)
{
findResults = service.FindItems(WellKnownFolderName.Inbox, view);
foreach (var item in findResults.Items)
{
emails.Add((EmailMessage)item);
}
moreEmails = findResults.MoreAvailable;
if (moreEmails)
{
view.Offset += pageSize;
}
}

相关内容

最新更新