亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

內存泄漏/ Python Windows 7屏幕截圖

內存泄漏/ Python Windows 7屏幕截圖

守候你守候我 2021-03-15 12:12:23
我已經在雙顯示器系統(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) 


查看完整回答
反對 回復 2021-03-24
  • 1 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號