128 GB RAM x64 CPU 上的内存不足问题



我正在开发一个程序,它将一个 312 MB 的加密文件读取到内存流中,对其进行解密并复制到目标流中。我的程序适用于大约 120 MB 的文件大小。我不知道为什么它为此失败了?

我的系统信息 : 64 位 CPU , 内存 : 128 GB还有我在配置管理器中使用"任何 CPU"设置构建的 c# 代码。

写了一个示例程序来检查内存不足的位置,我看到它在 512 MB 时失败。我确实知道内存流需要内存中的连续块,因为 RAM 是碎片化的。但是这里的RAM大小很大,我也在多台机器上尝试了14 GB,64GB和8GB的RAM。

任何帮助,不胜感激。

我编写的示例程序用于测试内存不足大小:

 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");
            }

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

尝试在"构建"选项卡中禁用项目属性中的"首选 32 位"选项,这对我有用。祝你好运!

最新更新