在128 GB Ram x64 cpu上出现内存不足问题

时间:2016-06-09 17:02:55

标签: c# memory memory-management out-of-memory

我正在开发一个程序,它将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");
            }

2 个答案:

答案 0 :(得分:3)

我估计刚用尽大对象堆。然而,另一种解决问题的方法是不将流读入内存 - 大多数解密算法只需要一个System.IO.Stream - 将其读入内存似乎是一个相对毫无意义的步骤 - 只需将传入文件或网络流传递给解密api

答案 1 :(得分:1)

尝试禁用选项&#34;首选32位&#34;从项目的属性,在&#34; Build&#34;标签,这对我有用。 祝你好运!