【发布时间】:2019-04-12 17:10:15
【问题描述】:
我们有一个使用 Exchange Web 服务的服务应用程序。 我们有内存问题如果我在我的服务中调用以下代码行之一,这会导致我的服务应用程序中的内存泄漏。 用户应用处理大量邮件,内存占用会不断增加,再也不会被释放。
代码示例。
var item = Item.Bind(mServiceWrapper.Service, ItemId.UniqueId);
var folder = Folder.Bind(mServiceWrapper.Service,item.ParentFolderId.UniqueId);
EmailMessage.Load(new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent));
但是,如果我将程序作为 UI 应用程序启动,则一切正常,不会发生内存泄漏。 仅在将我们的程序作为服务启动时才会出现此问题。 您是否已经知道该问题并有解决方案?
我正在使用 EWS 的 StreamingSubscript。获取 Emailas Exchange Server 并将其存储在数据库中。
private void OnNotificationEvent(object sender, NotificationEventArgs args)
{
var item = Item.Bind(mServiceWrapper.Service, mailItem.ItemId.UniqueId);
var folder = Folder.Bind(mServiceWrapper.Service, mailItem.ParentFolderId.UniqueId);
var propertySet = new PropertySet(BasePropertySet.FirstClassProperties);
item.Load(propertySet);
folder.Load(PropertiesProvider.FolderPropertySet);
object[] data = new object[]
{
item.Id.UniqueId,
folder.Id.UniqueId,
folder.ExtendedProperties.GetPropertyValue<long>(@"LexolutionContainerId"),
folder.ExtendedProperties.GetPropertyValue<int>(@"TrayId")
};
}
另一个线程将加载电子邮件并再次处理电子邮件。像这样
protected override void InternalWork(IJob job)
{
try
{
object[] data = (object[]) job.DataObject;
string itemUniqueId = (string) data[0];
ItemId itemId = new ItemId(itemUniqueId);
long targetContainerId = (long) data[2];
var propertySet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.MimeContent,
EmailMessageSchema.InternetMessageId);
var mail = Item.Bind(ExchangeWrapper.Service, itemId, propertySet);
}
}
【问题讨论】:
标签: c#-4.0