【问题标题】:Simple loop on windows7 creates memory leak?windows7上的简单循环会造成内存泄漏?
【发布时间】:2012-07-03 08:56:31
【问题描述】:

对此我不确定,但这个问题可能与Memory leak in batch for loop? 有关。

我有以下简单的批处理脚本:

@echo off
:label
cmd.exe /c cls
echo hello
goto label

当此脚本在 Windows7 32 位安装上运行时,它运行良好。但是,当我在我可以访问的少数 Windows7 64 位计算机上运行它时,它会缓慢且显然不可逆转地耗尽所有系统内存 - 正如在 Windows 任务管理器中所见。关闭执行上述批处理行的窗口后,内存仍处于使用状态。

这是否发生在其他人身上?如果没有,您知道是什么原因造成的吗?系统上安装的其他软件?

如果我这样做,我也会有同样的行为

while True: os.system('cls')

在 Python-X/Y shell 中循环。它似乎与创建子流程有关。如果我将上述内容从 cmd.exe /c cls 更改为 cls,我不会出现内存泄漏。我遇到了这个问题,因为我从 Linux 移植了一个 Python 脚本,该脚本反复为统计显示执行清晰的屏幕,如 Clear the screen in python 所示为 Windows 实现。

【问题讨论】:

  • 显然 Downvoter 先生不喜欢内存泄漏。
  • +1 提出一个完全合理的问题。

标签: windows-7 memory-leaks batch-file 64-bit 32-bit


【解决方案1】:

我在我的 x64 机器上运行它,它工作正常,随着时间的推移它确实开始出现问题,但我不会称之为内存泄漏,如果有的话,它只会在 CPU 达到峰值时锤击 CPU。

根据计算机的性能,它可能只是难以跟上命令。我在timeout 中添加了一秒钟,现在 cmd 更快乐并且显示不到 1MB 的 RAM 消耗。

尝试根据您的需要调整它,或者找到获得速度和性能的中间地带,让 cmd 休息一下 :)

@echo off
:label
cmd.exe /c cls
echo hello
timeout /t 1 >nul
goto label

【讨论】:

  • 感谢您进行该测试!你说它开始挣扎 - 你看到内存使用是否在任务管理器中慢慢上升?
  • @onno 是的,在将它留在恒定循环中一段时间​​后,内存确实开始上升,但不如 CPU 上升得更快。
  • 谢谢!这是有趣的部分。关闭 cmd.exe 窗口后,内存使用是否再次下降?对我来说不是这样,我可以让操作系统完全无法使用,只需让窗口打开直到所有内存都被吞噬。
  • @onno 我删除了timeout 并再次运行它。记忆不会立即恢复,但如果你给它足够的时间,它会慢慢恢复正常。我对内存管理知之甚少,无法知道幕后发生的事情,但我的猜测是释放所有生成的 cmd 窗口的所有内存地址只需要时间,因为大概它将分配新内存对于每个cmd /c 命令,根据您离开它的时间长短,这可能会很多!
  • 要检查的另一件事是您的 RAM,您的计算机有多少内存?
猜你喜欢
  • 2014-01-09
  • 2012-04-09
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多