小编Tar*_*ada的帖子

EWS GetItem请求+ IncludeMimeContent +巨大邮件= OutOfMemoryException

我在Exchange 2007邮箱中有一个200 MB大的电子邮件.别问我怎么那么大; 我不知道.但它在邮箱中,它需要以MIME格式出来.为了使其更具挑战性,它需要使用C#中的EWS以MIME格式退出.

从理论上讲,这是小菜一碟,对吧?我所要做的就是:

GetItemType getItemRequest = new GetItemType {
    ItemIds = new ItemIdType[] { sItemId },
    ItemShape = new ItemResponseShapeType {
        BaseShape = DefaultShapeNamesType.IdOnly,
        IncludeMimeContent = true,
        IncludeMimeContentSpecified = true,
        BodyType = BodyTypeResponseType.Best,
        BodyTypeSpecified = true
    }
};
Run Code Online (Sandbox Code Playgroud)

...然后将其发送出去:

GetItemResponseType getItemResponse = oService.GetItem(getItemRequest);
Run Code Online (Sandbox Code Playgroud)

但是,通过200 MB的邮件,现实生活可以很快地击中你的头脑.我的程序在占用2GB内存后会出现System.OutOfMemoryException.堆栈跟踪指向我:

System.Text.StringBuilder.ToString()
System.Xml.XmlTextReaderImpl.ParseText()
System.Xml.XmlTextReaderImpl.ParseElementContent()
System.Xml.XmlTextReaderImpl.Read()
System.Xml.XmlTextReader.Read()
System.Xml.XmlReader.ReadStartElement()
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExchangeServiceBinding.Read75_MimeContentType(Boolean isNullable, Boolean checkType)
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExchangeServiceBinding.Read139_MessageType(Boolean isNullable, Boolean checkType)
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExchangeServiceBinding.Read302_ArrayOfRealItemsType(Boolean isNullable, Boolean checkType)
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExchangeServiceBinding.Read310_ItemInfoResponseMessageType(Boolean isNullable, Boolean checkType)
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExchangeServiceBinding.Read315_ArrayOfResponseMessagesType(Boolean isNullable, Boolean checkType)
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExchangeServiceBinding.Read331_GetItemResponseType(Boolean isNullable, Boolean checkType)
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExchangeServiceBinding.Read429_GetItemResponse()
Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer125.Deserialize(XmlSerializationReader reader) …
Run Code Online (Sandbox Code Playgroud)

c# out-of-memory large-data exchangewebservices

5
推荐指数
0
解决办法
1005
查看次数