@RISK · 2022年3月8日

运行@RISK模拟,提示Out of Memory”(内存不足)

适用于:
@RISK 5.x–7.x
@RISK for Excel 4.x
@RISK for Project 4.x
所有其他产品(临时文件夹、虚拟内存和 Windows 桌面堆提示)

当我执行某些操作时,出现“内存不足”错误。是什么原因造成的,我能做些什么呢?

运行程序通常需要比计算机已有的更多的内存。为了满足这种需求,Windows 将磁盘空间动态地用作“虚拟内存”,也称为“分页文件”。许多应用程序,包括@RISK,也在运行期间将文件写入您的硬盘。例如,@RISK 将所有模拟数据存储在一个临时文件中,以供生成报告时使用。

“内存不足”可以表示实际的内存不足情况,或磁盘空间等资源不足。当您的磁盘有足够的空间时,Windows 和您的应用程序会运行得更好–您可能会在可用磁盘空间减少到最后一兆字节之前“内存不足”。“内存不足”还可以指示工作簿中的一个或多个工作表受到保护。

以下内容仅适用于@RISK。例如,在大型模拟后打开模拟数据窗口或执行其他占用大量系统资源的操作时,可能会出现“内存不足”。

特别注意:即使您没有收到“内存不足”错误,您也可以使用本文中的技术加速您的@RISK 模拟。

  • 收集输入分布
    • @RISK 默认是收集所有输入。如果您实际上不需要记录每个输入的值,请进入 Simulation Settings 并在 Sampling 选项卡上,在标题为 Collect Distribution Samples 的部分中,将“All”更改为“Inputs Marked With Collect”。然后转到@RISK 模型窗口(输出和输入列表)并检查(勾选)您要收集的输入。
    • 您应该意识到一个重要的限制:@RISK 仅在龙卷风图中显示收集的输入和其他敏感度输出。如果您不确定要收集哪些输入,您可以在收集所有输入的同时运行一个小型试点模拟,以帮助您确定对您的输出影响最大的输入。然后,您将知道在全面模拟中要标记哪些输入以供收集。
  • 输出和统计函数
    • @RISK 必须在每次迭代中存储每个输出的值。如果您有许多不需要的输出,请在 Excel 的公式栏中删除公式的 RiskOutput 部分,或使用模型窗口将它们作为输出删除。
    • 当您有一个统计函数(如 RiskMean 或 RiskPercentile)指向一个单元格时,@RISK 必须在每次迭代时存储该单元格的值。如果单元格是@RISK 输出,则@RISK 无论如何都会存储它的值。但是,如果它是一个未被收集的输入,或者它既不是输入也不是输出,那么它就是@RISK 需要为其存储值的附加单元。查看您的统计功能并消除任何不需要的功能。
  • 迭代次数
    • 您是否执行了不必要的迭代?考虑让@RISK测试收敛性。试运行将使您了解必要的迭代次数,然后您可以使用该次数或更多次数作为您的固定迭代次数。
  • 模拟次数
    • 您是否设置了大于 1 的模拟次数?除非您使用 RiskSimtable 函数,否则很少有这样做的理由。另请参见迭代与模拟
  • 受保护的表单
    • 对于@RISK 6.0 及更高版本,受保护的工作表不是问题。但是,如果您的工作簿中有一个或多个受保护的工作表,@RISK 4.x 和 5.x 可能无法执行模拟。尝试取消保护所有工作表(包括您创建的任何隐藏工作表)并开始模拟。