2017-08-28 3 views
1

Ich verwende CefSharp 55 in WPF. Jedes Mal, wenn ich eine neue ChromiumWebBrowser mache, erscheint eine neue CefSharp.BrowserSubprocess.exe im Task-Manager, die normal ist. Aber sie verschwinden nicht, wenn ich Dispose() auf einem ChromiumWebBrowser rufe. Sie verschwinden nur, wenn ich die Anwendung schließe, vermutlich, weil ich zu dieser Zeit Cef.Shutdown() rufe. Ich habe versucht GC nach der Entsorgung zu zwingen, aber ich ändere nichts.CefSharp.BrowserSubprocess sind nicht geschlossen, wenn ChromiumWebBrowser dispositioniert wird

Wenn also der Benutzer die Tabs im Webbrowser öffnet und schließt, wird am Ende eine Menge CefSharp.BrowserSubprocess ausgeführt, die nie geschlossen wird, außer wenn die App geschlossen wird.

Im Konstruktor der Klasse ChromiumWebBrowser erstreckt, kann ich

var requestContextSettings = new RequestContextSettings 
{ 
    PersistSessionCookies = false, 
    IgnoreCertificateErrors = true 
}; 

RequestContext = new RequestContext(requestContextSettings); 

Wenn ich den Browser verfügen, haben

browser.Dispose(); 
browser.RequestContext.Dispose() 

Habe ich etwas vergessen?

bearbeiten

es scheint das Problem zu CefSharp.BrowserSubprocess beschränkt. Wenn ich über einen Browser verfüge, der ein Youtube-Video zeigt, läuft der Ton des Videos noch. Es hat vorher funktioniert, der Video-Ton wurde nach dem entsorgen abgeschnitten. Vielleicht ist es ein Fehler in der neuen Version von CefSharp, den ich kürzlich aktualisiert habe.

+0

Sie müssen sich keine Sorgen machen. lese [this] (https://bitbucket.org/chromiumgemed/cef/wiki/GeneralUsage#markdown-header-processes) – Amogh

+0

Ich lese den Abschnitt ** Process **. Es wird erklärt, dass mehrere Prozesse gestartet werden, aber es wird nicht gesagt, ob es normal ist, dass sie am Leben bleiben, bis die Anwendung abgeschlossen ist. Ich habe einen Test gemacht, in dem ich den Webbrowser-Tab geöffnet und geschlossen habe. Ich bekomme schnell einen Speichermangel. Unsere Anwendung soll den ganzen Tag laufen, ohne neu gestartet zu werden. Es wird nicht bis zum Ende des Tages dauern. – Gael

Antwort

2

Ich fand, was das Problem war. Ich habe eine Implementierung von ILifeSpanHandler gemacht, wo ich True in DoClose(...) zurückgegeben habe, weil ich True zurückgebe, meinen Sie dem Browser, dass er schließen kann. Aber im Dokument heißt es, falsch zurück zu geben, um den Browser sofort zu zerstören.

(https://github.com/cefsharp/CefSharp/blob/master/CefSharp/Handler/ILifeSpanHandler.cs)

Nachdem Sie das getan, The CefSharp.BrowserSubprocess geschlossen sind, wenn ich den entsprechenden Web-Browser zu schließen.

Verwandte Themen