2014-01-25 5 views
9

Die Speichergröße des QtWebKit-Prozesses nimmt mit jeder neuen Seitenladung zu. Cleaning Memory Cache hilft nicht. Weiß jemand, wie man es löst?Gibt es eine Lösung für das QtWebKit Speicherleck?

Dieses einfache Beispiel stürzt nach einiger Betriebszeit:

from PyQt5.QtCore import QUrl 
from PyQt5.QtWidgets import QApplication 
from PyQt5.QtWebKitWidgets import QWebView 
from PyQt5.QtWebKit import QWebSettings 

class Crawler(QWebView): 
    def __init__(self): 
     QWebView.__init__(self) 

     self.settings().setMaximumPagesInCache(0) 
     self.settings().setObjectCacheCapacities(0, 0, 0) 
     self.settings().setOfflineStorageDefaultQuota(0) 
     self.settings().setOfflineWebApplicationCacheQuota(0) 
     self.settings().setAttribute(QWebSettings.AutoLoadImages, False) 

     self.loadFinished.connect(self._result_available) 

    def start(self): 
     self.load(QUrl('http://stackoverflow.com/')) 

    def _result_available(self, ok): 
     print('got it!') 

     self.settings().clearMemoryCaches() # it doesn't help 
     self.settings().clearIconDatabase() 

     self.start() # next try 

if __name__ == '__main__': 
    app = QApplication([]) 
    crawler = Crawler() 
    crawler.start() 
    app.exec_() 
+1

nicht wirklich zu erhöhen. Es scheint ein etwas verwirrendes "Feature" von webkit zu sein (siehe [hier] (http://qt-project.org/forums/viewthread/11105) für einige Diskussionen). Eine ziemlich hässliche Problemumgehung besteht darin, regelmäßig einen neuen Prozess zu starten, so dass das System den Speicher zurückfordern kann. – ekhumoro

Antwort

6

Grund des Speicherleck in deaktiviert das automatische Laden von Bildern. Es ist eine bug, die in der nächsten QT-Version behoben wird. Das Entfernen dieser Linie löst das Problem zum Beispiel oben:

self.settings().setAttribute(QWebSettings.AutoLoadImages, False) 

Zweite mögliche Ursache, die zu Undichtigkeiten führen kann, ist "Memory leak in GStreamer". Es ist in Bearbeitung.

Update:

Ich sehe immer noch Menschen nach einer Lösung suchen. Ich habe kürzlich Bug mit AutoLoadImages bemerkt = False wurde nicht in Version Qt 5.2.1, noch in Qt 5.3 RC behoben. New discussion about it has been opened. Sie können für dieses Problem in Bugtracker abstimmen, um die Chancen für die Reparatur in Qt 5.3.0