0

我正在编写一个大小超过 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;
        }

但它不适用于压缩文件。

4

1 回答 1

1

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

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

于 2013-04-09T16:34:44.920 回答