我已经在双显示器系统(Windows7)上尝试以下Python代码来重复保存屏幕截图。它生成33张14.6MB(总共482MB)的照片,然后崩溃。使用Process Explorer进行检查,我可以看到已用内存量增加到约500MB。我的问题是如何阻止内存泄漏?import win32gui, win32ui, win32con, win32apiimport timeimport osdef 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
1 回答

犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
您将需要清理位图和DC,在位图保存后添加类似的内容。
win32gui.DeleteObject(bmp.GetHandle())
memdc.DeleteDC()
srcdc.DeleteDC()
win32gui.ReleaseDC(hwin, hwindc)
添加回答
举报
0/150
提交
取消