Исключение «Недостаточно памяти» при расшифровке файла XML - PullRequest
0 голосов
/ 10 июня 2010

Я использую библиотеку System.Security.Cryptography для шифрования и дешифрования XML-файлов.Хотя недавно я получал исключения OOM (Out of Memory) при попытке расшифровать файл размером 75 МБ.Вот код, который я использую:

    using System.Security.Cryptography.Xml;
    ...
    public static XmlDocument DecryptIntoXmlDoc(string filename)
    {
        //Decrypt the XML
        XmlDocument xmldoc = new XmlDocument();
        EncryptedXml exml = new EncryptedXml(xmldoc);
        TripleDESCryptoServiceProvider ekey = new TripleDESCryptoServiceProvider();
        ASCIIEncoding encoding = new ASCIIEncoding();

        ekey.Key = encoding.GetBytes(GetMasterKey());
        exml.AddKeyNameMapping("ekey", ekey);
        xmldoc.Load(filename);

        // -- THROWS THE OOM ERROR --
        exml.DecryptDocument();

        //Clear exml
        exml = null;

        return xmldoc;
    }

Как только вызывается .DecryptDocument (), я получаю следующую ошибку:

 Exception of type 'System.OutOfMemoryException' was thrown.

Я не смог никого найтиеще возникла эта проблема, но я читал, что если теги xml не имеют правильного имени / вложенности, файл может быть очень большим при загрузке в память.Уменьшит ли размер переименование моих тегов XML на более короткие имена?Есть ли способ вложить теги XML для уменьшения размера файла?

Могу ли я что-нибудь еще сделать?

1 Ответ

0 голосов
/ 10 июня 2010
  • Запустите вашу программу под отладчиком
  • Когда возникает исключение OOM, сделайте паузу и изучите граф объектов с корнем в exml. Что на самом деле занимает большую часть памяти?

Неизменяемые строки, вероятно, являются здесь убийцей, поскольку некоторые xml-анализаторы могут несколько раз удерживать весь документ в памяти.

...