我正在实现一个读取xml文件的系统,加密并压缩它们然后作为流发送到Web服务 我的测试xml文件大小不同1KB到26MB。 当我将代码作为单线程运行时,它似乎运行良好。 但是,当我将代码更新为多线程时,在操作大文件时,它会在代码的不同部分丢失内存异常。
以下是我的代码抛出异常的代码块:
1
RijndaelManaged sessionKey = new RijndaelManaged();
sessionKey.KeySize = 256;
EncryptedXml eXml = new EncryptedXml();
byte[] encryptedElement = eXml.EncryptData(xmlDoc.DocumentElement, sessionKey, false);
2
EncryptedXml.ReplaceElement(xmlDoc.DocumentElement, edElement, false);
3
private static string CompressStream(string data)
{
byte[] byteData = System.Text.ASCIIEncoding.ASCII.GetBytes(data);
byte[] compressedData = QuickCompression.Compress(byteData, CompressionMethod.Deflated, CompressionLevel.Highest);
return Convert.ToBase64String(compressedData);
}
在第三部分中,代码可以抛出任何行的异常,但特别是它抛出第三行
Convert.ToBase64String(compressedData);
与此同时,我在代码运行时通过任务管理器检查我的内存,似乎有很多可用的内存可供使用!
我的假设是,即使总共有可用内存,也没有足够的内存可以将字节数组大小作为统一块。
你怎么看?
如果我的假设是对的,那么
有没有办法强制内存合并可用的内存块以获得大的可用块? 要么 有没有办法强制我的代码等到有足够的可用内存来将字节数组大小作为统一块?
如果我的假设是错的,那么 可能是什么问题?
由于
修改
有一个名为MemoryFailPoint的课程,它可以帮助我解决我的问题吗?
答案 0 :(得分:0)
我想这是new string
内的Convert.ToBase64String
。
我可能有类似的问题。简单地用new string
分配大量内存块会抛出内存异常。在我的盒子(8 GB主内存)上,170 MB及以上。