WebKitGTK关于webkit\u web\u视图\u加载\u uri

WebKitGTK关于webkit\u web\u视图\u加载\u uri,webkit,webkitgtk,Webkit,Webkitgtk,我有一个关于WebktGTK的问题 这些天我正在做一个程序,可以分析网页,如果有可疑的网页内容 当WEBKIT_加载完成时发出“加载失败”“加载更改”信号, 程序通过再次调用webkit\u web\u view\u load\u uri连续分析下一页 () 我想问你的问题是记忆问题。 网页上的程序越多,WebKitWebProcess就越大 webkit_back_forward_list_get_length()返回值也通过分析网页而增加。我应该在哪里释放内存 你知道我如何解决这个问题,或者

我有一个关于WebktGTK的问题

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

当WEBKIT_加载完成时发出“加载失败”“加载更改”信号, 程序通过再次调用webkit\u web\u view\u load\u uri连续分析下一页

()

我想问你的问题是记忆问题。 网页上的程序越多,WebKitWebProcess就越大

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

你知道我如何解决这个问题,或者可以给我一些建议吗?我在哪里可以得到建议


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

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

我的建议是定期地,每加载这么多页面,创建一个使用单独web进程的新web视图,并销毁原始web视图。(这也将重置前/后列表以阻止它增长,虽然我怀疑在返回/转发列表中丢失的内存与渲染页面时的内存泄漏相比可能不太重要))我提出考虑自动发生这种情况;你的问题表明我们可能需要提高这方面的优先权。同时,您必须手动执行此操作:

  • 在应用程序中执行任何其他操作之前,请使用
    WEBKIT\u web\u context\u set\u process\u model()将流程模型设置为
    WEBKIT\u process\u model\u MULTIPLE\u SECONDARY\u PROCESSES
    。(如果您没有创建自己的web上下文,则需要使用默认的web上下文
    webkit\u web\u context\u get\u default()
  • 定期使用
    gtk\u widget\u destroy()
    销毁您的web视图,然后使用
    webkit\u web\u view\u new()
    等创建一个新视图,并将其附加到您的小部件层次结构中的某个位置。(请确保不要将
    webkit\u web\u view\u new\u与\u related\u view()
    一起使用,因为这是让两个web视图使用同一web进程的方式。)

如果您在使用该解决方案时遇到困难,一个极端的选择是定期向您的web进程发送SIGTERM以获取新的解决方案。连接到
WebKitWebView::web进程崩溃
,然后从那里调用
webkit\u web\u view\u load\u uri()
。这将使用新的web流程生成相同的web视图。

非常感谢您给我详细的回答。