【问题标题】:WebKitGTK about webkit_web_view_load_uriWebKitGTK 关于 webkit_web_view_load_uri
【发布时间】:2015-11-30 02:40:42
【问题描述】:

我有一个关于 WebktGTK 的问题。

这些天我正在制作一个程序,如果有可疑的网页内容,它可以分析网页。

当使用 WEBKIT_LOAD_FINISHED 发出“load-failed”“load-changed”信号时, 程序通过再次调用 webkit_web_view_load_uri 不断分析下一页。

(http://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#webkit-web-view-load-uri)

想问你的问题是内存问题。 程序分析网页越多,WebKitWebProcess越大。

webkit_back_forward_list_get_length() 返回值也通过分析网页而增加。我应该在哪里释放内存?

你知道我该如何解决这个问题或者能给我任何建议吗?我可以从哪里获得建议?

非常感谢:-)祝你有美好的一天^^

【问题讨论】:

    标签: webkit webkitgtk


    【解决方案1】:

    理论上,您所做的一切都很好,您根本不需要更改代码。实际上,WebKit 存在大量内存泄漏,并且如您所见,以编程方式在同一个 Web 视图中加载许多新 URI 最终会出现问题。

    我的建议是,每隔这么多页面加载,就定期创建一个使用单独 Web 进程的新 Web 视图,并销毁原始 Web 视图。 (这也将重置后退/前进列表以阻止其增长,尽管我怀疑与渲染页面时的内存泄漏相比,后退/前进列表丢失的内存可能并不重要。)我提交了Bug 151203 - [GTK] Start a new web process when calling webkit_web_view_load functions? 考虑有这会自动发生;您的问题表明我们可能需要提高优先级。同时,您必须手动完成:

    • 在您的应用程序中执行任何其他操作之前,使用webkit_web_context_set_process_model() 将流程模型设置为WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES。 (如果您不创建自己的 Web 上下文,则需要使用默认的 Web 上下文 webkit_web_context_get_default()。)
    • 定期使用gtk_widget_destroy() 销毁您的Web 视图,然后使用webkit_web_view_new() 等创建一个新视图。人。并将其附加到您的小部件层次结构中的某个位置。 (请务必不要使用 webkit_web_view_new_with_related_view(),因为这样可以让两个 Web 视图使用同一个 Web 进程。)

    如果您无法让该解决方案发挥作用,一个极端的替代方法是定期向您的 Web 进程发送 SIGTERM 以获取新的。连接到WebKitWebView::web-process-crashed,然后从那里拨打webkit_web_view_load_uri()。这将导致使用新 Web 进程的相同 Web 视图。

    【讨论】:

    • 非常感谢您给我详细的答复。
    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2011-08-28
    • 1970-01-01
    • 2019-04-27
    相关资源
    最近更新 更多