如何在撰写本文时压缩 xml 文件
本文关键字:文时 压缩 xml 文件 | 更新日期: 2023-09-27 17:57:17
我正在编写大小超过 1GB 的 XML 文件,但在撰写本文时,我想压缩该文件,以便减小 xml 文件的大小,以便在xmlDoc.Load(fileName)
的磁贴处在最短的持续时间内加载文件。我编写 XML 文件的代码是
using (FileStream fileStream = new FileStream(_logFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
xmlDoc.Load(fileStream);
int byteLenght = fileStream.ReadByte();
byte[] intBytes = BitConverter.GetBytes(byteLenght);
intBytes = Compress(intBytes);
xmlDoc.DocumentElement.AppendChild(newelement);
fileStream.SetLength(0);
xmlDoc.Save(fileStream);
}
也用于压缩
private static byte[] Compress(byte[] data)
{
byte[] retVal;
using (MemoryStream compressedMemoryStream = new MemoryStream())
{
DeflateStream compressStream = new DeflateStream(compressedMemoryStream, CompressionMode.Compress, true);
compressStream.Write(data, 0, data.Length);
compressStream.Close();
retVal = new byte[compressedMemoryStream.Length];
compressedMemoryStream.Position = 0L;
compressedMemoryStream.Read(retVal, 0, retVal.Length);
compressedMemoryStream.Close();
compressStream.Close();
}
return retVal;
}
但它不适用于压缩文件。
在
磁盘上压缩文件不会对缩短加载文档所花费的时间有太大作用,因为大部分时间用于为 XmlDocument 构建对象图。它非常慢,可能需要与从磁盘读取未压缩的 XML 一样长(或更长)的时间。虽然压缩可以在这里节省时间,但如果使用像内部 HDD 这样的快速媒体,它只是一个很小的收益。
如果要提高处理大型 XML 文件的性能,则需要使用类似 XmlReader 之类的东西来流式传输文件,而不是一次加载所有文件。