2015-11-30 83 views
0

我對WebktGTK有疑問。關於webkit_web_view_load_uri的WebKitGTK

這幾天我正在製作一個程序,它可以分析網頁是否有可疑的網頁內容。

當「 加載失敗 」,「負載變化」的信號發射與WEBKIT_LOAD_FINISHED, 程序通過調用webkit_web_view_load_uri再次再次連續anlaysis下一頁。

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

的問題要問你的是內存的問題。 程序分析網頁越多,WebKitWebProcess就越大。

webkit_back_forward_list_get_length()返回值也通過分析網頁而增加。在哪裏我可以釋放記憶?

你知道我該怎麼解決這個問題或者可以給我什麼建議我可以得到建議嗎?

非常感謝你:-)有一個愉快的一天^^

回答

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(),然後使用webkit_web_view_new()等創建一個新視圖。人。並將其附加到您的小部件層次結構中的某處。 (一定不要用webkit_web_view_new_with_related_view()因爲這是你如何讓兩個Web視圖使用相同的網絡的過程。)

如果你有麻煩的是解決方案正常工作,極端的替代方法是定期發送SIGTERM給您web進程獲得一個新的。連接到WebKitWebView::web-process-crashed,並從那裏撥打webkit_web_view_load_uri()。這將導致使用新的Web進程的Web視圖相同。

+0

非常感謝您給我詳細的答案。 – guest