我正在使用System.Security.Cryptography库来加密和解密xml文件。最近虽然我在尝试解密75MB文件时遇到了OOM(Out of Memory)异常。这是我正在使用的代码:
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标签来减小文件大小?
我还能做什么吗?
答案 0 :(得分:0)
exml
为根的对象图。什么实际上占据了大部分内存?不可变的字符串可能是这里的杀手,因为一些xml解析器最终可以将你的整个doc保存在内存中多次。