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 をディスクから読み取るのと同じくらい (またはそれ以上) かかることがあります。ここでは圧縮によって時間を節約できますが、内蔵 hdd のような高速メディアを使用する場合、わずかな効果しかありません。

大規模なXMLファイルで動作するパフォーマンスを改善する場合は、ファイルを一度にロードする代わりに、ファイルをストリーミングするXMLReaderのようなものを使用する必要があります。

于 2013-04-09T16:34:44.920 に答える