2016-04-22 6 views
0

Ich habe den folgenden Code für einen Screenshot der Web-Seite zu nehmen und sie zu speichernC# Selen Screenshot.SaveAsFile - entbindet Speicher

Screenshot screenshot = ((ITakesScreenshot)WebDriver).GetScreenshot(); 
screenshot.SaveAsFile($"{fileFullName}.png", ImageFormat.Png); 

Wenn das Debuggen im VS Performace Fenster Datei ich einen Speicher sehen können, Sprung von ca. 70-100MB (abhängig von der Seitengröße) beim Aufruf von SaveAsFile(), das selbst nach Ausführung der Methode nicht freigegeben wird.

Gibt es eine Möglichkeit, das Screenshot-Objekt zu erzwingen?

+1

Mein Verständnis von Garbage Collection ist nicht deterministisch, nur weil die Methode beendet ist, bedeutet nicht, dass der Speicher neu zugewiesen wird. Da die Garbage-Collection ein relativ teurer Prozess ist, wird sie nur ausgeführt, wenn dies erforderlich ist. Wenn Ihr System keinen Speicherdruck hat, kann es sich entscheiden, diesen Speicher nicht auszuführen oder neu zuzuweisen. Haben Sie deswegen Probleme mit der Leistung? – Macilquham

Antwort

0

Sie können die Speicherbereinigung erzwingen, indem Sie GC.Collect aufrufen. Sie sollten dies jedoch nicht aus Gründen tun, explained here.

.NET behandelt automatisch das Freigeben von Speicher für nicht verwendete Objekte, auf die nicht mehr verwiesen wird. Garbage Collection zwingt alle Threads zu stoppen, während es auftritt, so dass es häufig aufrufen wird eine Gebühr für Ihre Anwendung haben.