У меня есть сценарий, который находится за пределами игры, читает пиксели и реагирует на эту информацию нажатием клавиш, «нажатием» и т. Д. Итак, чтобы получить пиксели, я использую такой кодУтечка памяти GetPixel в Python
def function():
a = win32gui.GetPixel(win32gui.GetDC(win32gui.GetActiveWindow()), x, y)
return a
, чтобы быстро получить значения пикселей на экране и быстро реагировать на скрипт.
Он начинается отлично, он может выполнить все, что ему нужно, вовремя, но он становится все медленнее.
Я определил источник проблемы как GetPixel, пытаясь использовать другие методы, как этот
def function():
box = (x1, y1, x2, y2)
im = ImageOps.grayscale(ImageGrab.grab(box))
a = array(im.getcolors())
a = a.sum()
return a
которые слишком медленно, но если я запускаю время цикла, содержащего эти другие методы, они не постепенно выполнять медленнее и медленнее, как быстрый метод с GetPixel делает (утечка памяти.)
Я использую локальные переменные, которые удаляются впоследствии и т. д. Это проблема GetPixel. Я просто не знаю, где вещи его не удалить это, как сказать, Python, чтобы удалить его, если это вообще возможно, и т.д.
Вы пробовали сохранение содержимого устройства, то есть 'win32gui.GetDC (win32gui.GetActiveWindow())', в локальной переменной внутри вашей функции, а затем удалить его после использования? – TypeKazt
del/gc.collcet может удалить объект/собрать мусор, и вы также можете использовать gc.garbage, чтобы узнать, есть ли ссылочный цикл – galaxyan