4
我已經嘗試在雙監視器系統(Windows7)以下的Python代碼重複保存屏幕截圖。 它產生了14.6MB(共482MB)的33個鏡頭,然後崩潰。使用Process Explorer進行檢查我可以看到已使用的內存量增加到大約500MB。內存泄露/ Python的Windows 7截圖
我的問題是如何阻止內存泄漏?
import win32gui, win32ui, win32con, win32api
import time
import os
def my_capture(file_name):
hwin = win32gui.GetDesktopWindow()
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc)
memdc = srcdc.CreateCompatibleDC()
bmp = win32ui.CreateBitmap()
bmp.CreateCompatibleBitmap(srcdc, width, height)
memdc.SelectObject(bmp)
memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)
bmp.SaveBitmapFile(memdc, file_name) # 'screenshot.bmp'
def captureAndSave(i):
if i < 10:
tmpStr = "00000" + str(i)
elif i < 100:
tmpStr = "0000" + str(i)
elif i < 1000:
tmpStr = "000" + str(i)
elif i < 10000:
tmpStr = "00" + str(i)
elif i < 100000:
tmpStr = "0" + str(i)
else:
tmpStr = str(i)
my_capture(tmpStr + '.bmp')
def myMainLoop():
i = 0
while 1:
i = i + 1
captureAndSave(i)
time.sleep(0.2)
#-----------------------------------------------------------------------------
if __name__ == '__main__':
try:
myMainLoop() # capure all monitor windows
except KeyboardInterrupt:
pass
我從基本代碼:Python windows 7 screenshot without PIL:
謝謝你的回答。它在添加清理代碼後工作得很好。 – PythonAndPascal