Python WebkitGTK内存泄漏(清除功能)

时间:2015-07-02 08:34:16

标签: python webkit gtk pygtk

我有一个骨干1页的应用程序,需要在不同的路线上运行数小时。我在python上创建了一个简单的脚本,它运行我的浏览器并在全屏幕上运行。

import sys
from gi.repository import Gtk, Gdk, WebKit

class BrowserWindow(Gtk.Window):
    def __init__(self, *args, **kwargs):
        super(BrowserWindow, self).__init__(*args, **kwargs)

        self.connect("destroy", Gtk.main_quit)
        self.webview = WebKit.WebView()

        self.webview.connect("load-finished", self._load_finish)
        self.webview.connect("navigation-requested", self._navigation_requested)

        settings = self.webview.get_settings()
        print settings.get_property("enable-page-cache")
        settings.set_property("enable-page-cache", False)
        self.webview.set_settings(settings)
        self.webview.load_uri("http://www.google.com/")
        self.add(self.webview)
        self.show_all()

    def _load_finish(self, view, frame):
        print "Loading completed"
        print view

    def _navigation_requested(self, view, frame, request):
        print "Mavigation change requested"
        self.webview.get_back_forward_list().clear()
        return False

def main():
    Gtk.init(sys.argv)

    window = BrowserWindow()
    window.show()
    window.fullscreen()

    Gtk.main()
if __name__ == "__main__":
    main()

这里的问题是每当它改变路线时,它会增加一些内存。拥有更多图像的图像可以更快地增加内存。而不是使用内存中的任何东西,它往往会使用更多的内存,但不会使用它。

我尝试搜索一个清晰的功能,但没有得到任何帮助。我也尝试过具有明确功能的QTWebkit,但它也没有帮助。

1 个答案:

答案 0 :(得分:0)

真正的问题是:你确定内存使用是一个实际问题吗?现代浏览器(和webview)可能具有非常复杂的缓存行为:“倾向于使用更多内存但不利用它”很可能是一种过于简化的情况图。

说WebkitGTK确实让你可以控制缓存行为:看看set_cache_model()和相关函数(这些是webkit2gtk中的WebKitWebContext和webkitgtk中的全局函数的一部分)。