1

我有一个关于 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() 返回值也通过分析网页而增加。我应该在哪里释放内存?

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

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

4

1 回答 1

2

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

我的建议是定期,每加载这么多页面,创建一个使用单独 Web 进程的新 Web 视图,并销毁原始 Web 视图。(这也将重置后退/前进列表以阻止其增长,尽管我怀疑与渲染页面时的内存泄漏相比,后退/前进列表丢失的内存可能并不重要。)我提交了错误 151203 - [GTK]调用 webkit_web_view_load 函数时启动新的 Web 进程?考虑让这种情况自动发生;您的问题表明我们可能需要提高优先级。同时,您必须手动执行此操作:

  • 在您的应用程序中执行任何其他操作之前,请将流程模型设置为WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSESusing webkit_web_context_set_process_model()。(如果您不创建自己的 Web 上下文,则需要使用默认的 Web 上下文webkit_web_context_get_default()。)
  • 定期使用 销毁您的 Web 视图,然后使用etgtk_widget_destroy()创建一个新视图。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 视图。

于 2016-01-03T02:41:50.060 回答