[英]How to get wcf message body using stream with less memory?
我有一个这样的 xml 文件:
<bookstore>
<book genre='novel' ISBN='10-861003-324'><title>The Handmaid's Tale</title><price>19.95</price></book>
<book genre='novel' ISBN='1-861001-57-5'><title>Pride And Prejudice</title><price>24.95</price></book>
</bookstore>
我使用这个 xml 文件来创建一条消息。 然后,我想使用流来获取消息体,所以我使用了这样的代码:
XmlReader xmlReader = XmlReader.Create("D:\\TestForCSharp\\ConsoleApp1\\ConsoleApp1\\2books.xml");
Message message = Message.CreateMessage(MessageVersion.None, null, xmlReader);
MemoryStream output = new MemoryStream();
MemoryStream ms = new MemoryStream();
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms, Encoding.UTF8);
message.WriteBodyContents(writer);
writer.Flush();
ms.Seek(0, SeekOrigin.Begin);
这已经比 ReadOuterXml 使用更少的内存,但由于message.WriteBodyContents(writer)
而增加了内存使用。
XmlReader xmlReader = XmlReader.Create("D:\\TestForCSharp\\ConsoleApp1\\ConsoleApp1\\2books.xml");
Message message = Message.CreateMessage(MessageVersion.None, null, xmlReader);
XmlReader reader = message.GetReaderAtBodyContents();
string res = reader.ReadOuterXml();
Stream ms = GenerateStreamFromString(res);
public static Stream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
有更好的内存解决方案吗?
是否可以在没有任何内存成本的情况下使用流获取消息正文?
也许 XmlTextReader 可以帮助您。 XmlTextReader 是用于从文本文件中读取 XML 的特定派生类。
本案例中的另一个答案可能会对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.