2012-07-02 54 views
0

我對此不確定,但這個問題可能與Memory leak in batch for loop?有關。windows7上的簡單循環會造成內存泄漏?

我有以下的瑣碎的批處理腳本:

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

當這個腳本在Windows7的32位安裝運行時,它表現良好。但是,當我在我能夠訪問的少數Windows7 64位機器上運行它時,它慢慢地,顯然不可撤銷地吞噬了所有系統內存 - 如Windows任務管理器中所見。在關閉執行上述批處理行的窗口後,內存將保持使用狀態。

這是否發生在其他人身上?如果沒有,你知道是什麼原因造成的嗎?系統上安裝的其他軟件?

我也有同樣的行爲,如果我這樣做在Python-X/Y殼

while True: os.system('cls') 

循環。它似乎與創建子流程有關。如果我將cmd.exe /c cls的上述內容更改爲cls,則不會發生內存泄漏。我遇到了這個問題,因爲我從Linux移植了一個Python腳本,它重複地爲統計顯示提供了一個清晰的屏幕,用於Windows,如Clear the screen in python所示。

+0

顯然Downvoter先生不喜歡內存泄漏。 –

+0

對於一個完全合理的問題+1。 –

回答

0

我在我的x64機器上運行了它,它工作正常,隨着時間的推移它開始掙扎,但我不會將它稱爲內存泄漏,如果有任何事情只是在CPU爆發時敲擊CPU。

它可能只是努力跟上命令,取決於計算機的性能。我在timeout中添加了一秒鐘,現在cmd更加快樂,顯示RAM消耗小於1MB。

儘量只調整這對您的需求,或者找到中間立場你在哪裏得到的速度和性能,只是給CMD休息:)

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

謝謝你做這個測試!你說它開始掙扎 - 你是否看到內存使用是否在任務管理器中慢慢爬升? – onno

+0

@onno是的,在恆定循環中離開它一段時間之後,內存確實開始爬起來,而不像CPU那麼快。 –

+0

謝謝!這是有趣的部分。關閉cmd.exe窗口後內存使用是否再次下降?對我來說,它並不是,我可以通過將窗口打開直到所有內存被吞噬掉,使操作系統完全無法使用。 – onno