我在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)