限制 Racket 博士的记忆

Limiting Dr. Racket's memory

一周前我增加了Racket博士的记忆,现在我想把它减少到和以前一样的数量。所以我将它限制回 128 MB。但这没有效果...它总是消耗超过 128 MB...

这确实是个问题,因为它会导致我的计算机过热。 有人知道我如何限制 Racket 博士不超过 128 MB 吗?

这是问题的屏幕截图:

我认为消耗的额外内存不是导致计算机过热的原因。更有可能是因为某些函数正在使用 CPU。而是尝试优化代码。

事实上,通过限制可用内存,您最终可能会导致更多 disk paging,从而减慢速度并可能消耗更多 CPU ......并导致更多过热。

一个程序使用的内存和DrRacket总共使用的内存是有区别的。当我启动 DrRacket 并进入或 运行 任何程序之前,我看到 DrRacket 使用 250MB。交互 window 指出我也将内存限制为 128MB,这意味着该特定程序不能超出这些范围,但是 DrRacket 的一些功能在您的机器上使用的内存比我的多得多。

我进入设置并删除了一些我不使用的功能(例如 Algiol60)。之后重新启动时,我使用的内存减少了 50MB,这确实证实了内存是由 DrRacket 而不是程序使用的。

对于一个特定的复杂程序,我猜后台扩展可能会占用大量内存。也许您也可以将其关闭,看看当前使用的内存是否减少。

关于热量

正如 Óscar 所提到的,只要您听不到正在使用交换(大量磁盘使用),内存使用与热量几乎没有关系。热量与 CPU 使用有关。在进行计算时,OS 将使可用资源可用,并可能增加 CPU 的频率,从而增加热量。

如果您创建的线程应用程序具有等待任务的循环,请确保您没有创建活动循环。睡眠可能会降低活跃度,也许 Racket 有更好的方法(从未在 Racket 中使用过 threded 应用程序)

如果您正在计算某些东西,CPU 的增加是很自然的。是为了让你早点得到答案。可以更改计算机设置以支持电池使用时间。检查 OS 和 BIOS。 (这使得这不是球拍问题)

Dr Racket状态栏中显示的内存为N/A。

实验:

  1. 选择球拍 |限制内存并指定 8 MB(最小值)。
  2. 选择文件 |新标签页
  3. 在“交互”窗格中分配 8 MB 内存。例如输入 (define x (make-bytes (* 8 1024 1024)))。 (我建议将结果分配给一个变量,就像这样,因为我怀疑你想让 Dr Racket 打印 8 MB 的字节。)

我得到的结果:

Welcome to DrRacket, version 6.1.1.6--2014-12-21(aabe9d7/a) [3m].
Language: racket [custom]; memory limit: 8 MB.
> (define x (make-bytes (* 8 1024 1024)))
out of memory 
> 

假设您得到相同的结果,那么您的计算机 运行 更热还有其他原因。