我对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()通过分析网页也增加了返回值。我在哪里释放记忆?
你知道我怎么能解决这个问题或者可以给我任何建议我可以获得建议吗?
非常感谢:-)祝你有愉快的一天^^
答案 0 :(得分:2)
理论上,你所做的事情非常好,你根本不需要改变你的代码。实际上,WebKit有很多内存泄漏,并且在同一个Web视图中以编程方式加载许多新URI最终会出现问题,正如您所发现的那样。
我的建议是定期,每隔这么多页面加载,创建一个使用单独的Web进程的新Web视图,并销毁原始Web视图。 (这也将重置后退/前进列表以阻止其增长,但我怀疑后台/前进列表中的内存丢失与渲染页面时的内存泄漏相比可能不显着。)我已将Bug 151203 - [GTK] Start a new web process when calling webkit_web_view_load functions?提交给考虑自动发生这种情况;您的问题表明我们可能需要优先考虑。与此同时,您必须手动完成:
WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES
将流程模型设置为webkit_web_context_set_process_model()
。 (如果您没有创建自己的Web上下文,则需要使用默认的Web上下文webkit_web_context_get_default()
。)gtk_widget_destroy()
定期销毁您的网络视图,然后使用webkit_web_view_new()
等创建一个新视图。人。并将其附加到窗口小部件层次结构中的某处。 (请确保不要使用webkit_web_view_new_with_related_view()
作为如何使用相同的网络流程获得两个网页浏览量。)如果您无法使该解决方案发挥作用,那么极端的替代方案是定期将SIGTERM发送到您的Web流程以获取新的解决方案。连接到WebKitWebView::web-process-crashed
,然后从那里拨打webkit_web_view_load_uri()
。这将导致使用新Web流程的相同Web视图。