Сборщику мусора не удается восстановить BitmapImage?

У меня есть приложение (WPF), которое создает BitmapImages в огромных количествах (например, 25000). Похоже, что фреймворк использует некоторые внутренние логика, поэтому после создания потребляется около 300 МБ памяти (150 виртуальных и 150 физических).Эти BitmapImages добавляются в объект изображения, и они добавляются в Canvas.Проблема в том, что когда я выпускаю все эти изображения, память не освобождается. Как обратно освободить память?

Приложение простое: 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>

Код программной части

        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();
        }

Это снимок экрана ResourceManager после добавления изображений. enter image description here

7
задан Blablablaster 26 June 2012 в 07:53
поделиться