У нас есть приложение-служба, которое использует веб-службу Exchange.У нас проблема с памятью. Если я вызываю одну из следующих строк кода в моем сервисе, это вызывает утечку памяти в моем сервисном приложении.Пользовательское приложение обрабатывает много электронных писем, поэтому использование памяти будет постоянно увеличиваться и никогда не будет освобождено.
Примеры кода.
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));
Но если я запусту нашу программу как приложение пользовательского интерфейса,все отлично работает без утечки памяти.Проблема возникает только при запуске нашей программы в качестве службы.Вам уже известна проблема, и у вас есть решение?
Я использую StreamingSubscript от EWS.Получите 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);
}
}