如何在撰写本文时压缩 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;
        }

但它不适用于压缩文件。

如何在撰写本文时压缩 xml 文件

磁盘上压缩文件不会对缩短加载文档所花费的时间有太大作用,因为大部分时间用于为 XmlDocument 构建对象图。它非常慢,可能需要与从磁盘读取未压缩的 XML 一样长(或更长)的时间。虽然压缩可以在这里节省时间,但如果使用像内部 HDD 这样的快速媒体,它只是一个很小的收益。

如果要提高处理大型 XML 文件的性能,则需要使用类似 XmlReader 之类的东西来流式传输文件,而不是一次加载所有文件。