我工作的一個PyQt4的應用程序,我所有,但完成後,除了似乎有內存泄漏。整個事情的代碼很長,所以我不會在這裏發佈所有的代碼。我一直在使用名爲Python Memory Validator的工具來跟蹤我的應用程序的內存分配。我注意到,它繼續在實例的數量增加了程序初始化後的類,最突出,迭代器,特別是dictionary-keyiterator
,listiterator
和tupleiterator
。除了這些,唯一的其他類,其繼續在實例的數量增加是PyCapsule
和method-wrapper
。迭代器對象,PyCapsules和內存性能
我已經調查了迭代器的分配位置,似乎至少tupleiterators實例化,並且從不刪除每次我使用zip()
函數。這是正常的行爲還是這些迭代器可能是內存泄漏的原因?如果是這樣,是否有解決方法?
我也調查了其中PyCapsules和方法,包裝已經被實例化並同時出現從一個方法創建了下面的代碼,並且永遠不會被刪除。
def importXml(self, fh):
error = None
try:
handler = SaxSensorDataHandler(self)
parser = QXmlSimpleReader()
parser.setContentHandler(handler)
parser.setErrorHandler(handler)
input_ = QXmlInputSource(fh)
self.new = True
if not parser.parse(input_):
if handler.errorLine == 4:
self.new = False
else:
raise ValueError
except (IOError, OSError, ValueError), e:
error = "Failed to import file: %s" % e
finally:
if fh is not None:
fh.close()
if error is not None:
return False, error
if len(self.__sensors) == 0:
return False, "Discovered no sensors connected to %s. Please check sensor connections and try again." % fh.url().host()
self.__dirty = True
return True, 'Discovered %d sensors connected to %s. Please press "Start" to begin taking measurements.' %(len(self.__sensors), fh.url().host())
這主要包括初始化,並用股票PyQt的班,SaxSensorDataHandler
是一個重新實現QXmlDefaultHandler
的,唯一的方法重新實現是那些由XML處理程序調用通過XML標籤讀取時間。我對這些方法所做的全部工作是將檢索到的信息分配給變量,並調用另一個更新容器中相應變量的方法,所以這不應該導致內存泄漏。內存泄漏可能是由PyQt4的Xml處理程序類的任何已知問題引起的?
在此先感謝您的幫助!