WPF Performance - PullRequest
       2

WPF Performance

3 голосов
/ 09 июля 2010

Я создаю простое приложение для создания фотогалереи, которое показывает изображения в списке.Xaml:

<ListBox x:Name="imageList" Margin="10,10" ItemsSource="{Binding}" Height="500">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding}" HorizontalAlignment="Left"></TextBlock>
                    <Image Source="{Binding}" Width="100" Height="100" HorizontalAlignment="Center"></Image>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Заданный здесь DataContext представляет собой строку [] путей к файлам изображений JPEG.

Когда я использую 10-11 изображений общим размером 11 МБ,общее использование памяти достигает 500 МБ !!!Я действительно удивлен, так как это простое приложение для просмотра фотографий, которое больше ничего не делает.Запуск этого приложения делает мою машину непригодной для использования.

Я использую VS 2010 Express, .NET 4 в Vista.Может ли кто-нибудь объяснить, что происходит в фоновом режиме, который требует такой большой объем памяти?И что можно сделать для его оптимизации?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

одним ключом здесь может быть виртуализация ...

другим ключом может быть поле decodepixelwidth BitmapImage

, поэтому свяжите ваше изображение через конвертер, чтобы вернуть менее интенсивно декодированный вариант памятиваше изображение ...

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.decodepixelwidth.aspx

также вы можете дать Удалить изображение в WPF в Listbox (утечка памяти) выстрел!

1 голос
/ 09 июля 2010

Не забывайте, что когда вы загружаете сжатое изображение (и JPEG может быть ОЧЕНЬ сжато), память, необходимая для его сохранения после загрузки, почти всегда основана на его несжатом состоянии.

Так что может быть очень обманчиво смотреть на размеры файлов и затем думать о памяти - вы должны посмотреть на размеры пикселей изображения - начните с длины х ширина х 4 как грубое правило - и затем пересмотреть, если память использование так возмутительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...