我正在开发一个程序,它将312 MB加密文件读入内存流,解密并复制到目标流。我的程序适用于大约120 MB的文件大小。我无法弄清楚为什么会失败呢?
我的系统信息:64位cpu,RAM:128 GB 我在Configuration Manager中使用Any CPU设置构建的c#代码。
我写了一个示例程序来检查我内存不足的地方,我发现它的失败在512 MB。我知道内存流需要内存中的连续块,因为RAM是分段的。但是这里的RAM大小很大,我在多台机器上尝试过,内存为14 GB,64 GB和16 GB。 8GB。
感谢任何帮助。
我编写的示例程序用于测试内存不足大小:
const int bufferSize = 4096;
byte[] buffer = new byte[bufferSize];
int fileSize = 1000 * 1024 * 1024;
int total = 0;
try
{
using (MemoryStream memory = new MemoryStream())
{
while (total < fileSize)
{
memory.Write(buffer, 0, bufferSize);
total += bufferSize;
}
}
Console.WriteLine("No errors");
}
catch (OutOfMemoryException)
{
Console.WriteLine("OutOfMemory around size : " + (total / (1024m * 1024.0m)) + "MB");
}
答案 0 :(得分:3)
我估计刚用尽大对象堆。然而,另一种解决问题的方法是不将流读入内存 - 大多数解密算法只需要一个System.IO.Stream - 将其读入内存似乎是一个相对毫无意义的步骤 - 只需将传入文件或网络流传递给解密api
答案 1 :(得分:1)
尝试禁用选项&#34;首选32位&#34;从项目的属性,在&#34; Build&#34;标签,这对我有用。 祝你好运!