编写压缩XML文档并跟踪其当前大小的有效方法

时间:2014-05-28 19:05:47

标签: c# xml filestream memorystream gzipstream

我的应用程序生成一个压缩(gzip)xml消息,通过https传输到Web服务器。它通过TCP / IP从客户端应用程序接收多达10,000个数据包/秒。每个数据包的大小可以是500到2000个字节。它应该基于数据包元数据将接收的数据包添加到集合中的相应xml消息。当特定邮件的长度达到指定的限制(例如1024Kb)时,应将其保存到指定文件夹中的文件中,然后从那里发送到Web服务器。

这样做的正确/有效方法是什么?

我正在考虑两种方式:

1) GZipStream>的FileStream 将每个数据包直接写入相应的文件并观察其大小。但我不确定如此频繁的写入是好的,我想保持文件系统工作负载尽可能低。

2) GZipStream> MemoryStream>文件 使用内存作为消息的缓冲区。在这种情况下,我应该为每条消息创建一个MemoryStream,并在添加数据包时保持打开状态。但是在这种情况下,我不知道如何在不关闭内存流的情况下获取内存流的当前长度。

实施例: 我只能在ms.close()调用之后得到ms.Length。

var ms = new MemoryStream();
var gstream = new GZipStream(ms, CompressionMode.Compress);
var writer = XmlWriter.Create(gstream);

writer.WriteStartElement("x", "root", "123");
writer.WriteElementString("packet_ID", "some data");
writer.WriteEndElement();                                   

writer.Close();
gstream.Close();
ms.Close();

Console.WriteLine("Memory size: " + ms.ToArray().Length);            
Console.ReadLine();

0 个答案:

没有答案