Ich versuche herauszufinden, wie ich einen WriteableBitmap-Speicher freigeben kann.
Im nächsten Abschnitt des Codes fülle ich den Backbuffer einer WriteableBitmap mit einer wirklich großen Menge an Daten aus "BigImage" (3600 * 4800 px, nur zum Testen) Wenn ich die Zeilen auskommentiere, in denen Bitmap und Image gleich Null sind, wird der Speicher nicht freigegeben und die Anwendung verbraucht ~230 MB, selbst wenn Image und bitmap nicht mehr verwendet werden!
Wie Sie am Ende des Codes sehen können, ist es notwendig, GC.Collect() aufzurufen, um den Speicher freizugeben.
Die Frage ist also, was ist der richtige Weg, um den von einem WriteableBitmap-Objekt verwendeten Speicher freizugeben? Ist GC.Collect() der einzige Weg?
Jede Hilfe wäre großartig.
PS. Entschuldigung für mein schlechtes Englisch.
private void buttonTest_Click(object sender, RoutedEventArgs e)
{
Image image = new Image();
image.Source = new BitmapImage(new Uri("BigImage"));
WriteableBitmap bitmap = new WriteableBitmap(
(BitmapSource)image.Source);
bitmap.Lock();
// Bitmap processing
bitmap.Unlock();
image = null;
bitmap = null;
GC.Collect();
}
0 Stimmen
stackoverflow.com/questions/1534983/