Garbage Collection kann BitmapImage nicht wiederherstellen?

Ich habe eine Anwendung (WPF), die BitmapImages in großen Zahlen (wie 25000) erstellt. Das Framework scheint eine interne Logik zu verwenden, sodass nach der Erstellung ca. 300 MB Speicher verbraucht werden (150 virtuelle und 150 physische). Diese Bitmap-Bilder werden dem Bildobjekt und dem Canvas-Bereich hinzugefügt. Das Problem ist, dass wenn ich all diese Bilder freigebe, der Speicher nicht freigegeben wird. Wie kann ich Speicher freigeben?

Die Anwendung ist einfach: Xaml

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Canvas x:Name="canvas" Grid.ColumnSpan="2"></Canvas>
        <Button Content="Add" Grid.Row="1" Click="Button_Click"/>
        <Button Content="Remove" Grid.Row="1" Grid.Column="1" Click="Remove_click"/>
    </Grid>

Code-Behind

        const int size = 25000;
        BitmapImage[] bimages = new BitmapImage[size];
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var paths = Directory.GetFiles(@"C:\Images", "*.jpg");
            for (int i = 0; i < size; i++)
            {
                bimages[i] = new BitmapImage(new Uri(paths[i % paths.Length]));
                var image = new Image();
                image.Source = bimages[i];
                canvas.Children.Add(image);
                Canvas.SetLeft(image, i*10);
                Canvas.SetTop(image, i * 10);
            }
        }

        private void Remove_click(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < size; i++)
            {
                bimages[i] = null;
            }
            canvas.Children.Clear();
            bimages = null;
            GC.Collect();
            GC.Collect();
            GC.Collect();
        }

Dies ist ein Screenshot von ResourceManager nach dem Hinzufügen von Bildern

Antworten auf die Frage(5)

Ihre Antwort auf die Frage