WebKitGTK 关于 webkit_web_view_load_uri

WebKitGTK about webkit_web_view_load_uri

我有一个关于 WebktGTK 的问题。

最近在做一个程序,如果有可疑的网页内容,可以分析网页。

当“load-failed”"load-changed" 信号与 WEBKIT_LOAD_FINISHED 一起发出时, 程序通过再次调用 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() return 值也通过分析网页增加了。我应该在哪里释放内存?

你知道我怎样才能解决这个问题,或者可以给我任何建议吗?我在哪里可以得到建议?

非常感谢你:-)祝你有愉快的一天^^

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

我的建议是定期地,每隔这么多页面加载,创建一个使用单独网络进程的新网络视图,并销毁原始网络视图。 (这也将重置 back/forward 列表以阻止它增长,尽管我怀疑丢失到 back/forward 列表的内存与呈现页面时的内存泄漏相比可能并不重要。)我提交了 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。 (如果您不创建自己的网络上下文,则需要使用默认网络上下文 webkit_web_context_get_default()。)
  • 定期使用 gtk_widget_destroy() 销毁您的 Web 视图,然后使用 webkit_web_view_new() 等创建一个新视图。阿尔。并将其附加到您的小部件层次结构中的某个位置。 (一定不要使用 webkit_web_view_new_with_related_view(),因为这是让两个 Web 视图使用相同 Web 进程的方式。)

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