ListboxItems, содержащие изображение - проблемы с памятью - PullRequest
1 голос
/ 25 ноября 2011

У меня проблема с дизайном моего списка. В настоящее время он имеет следующий DataTemplate как ItemTemplate:

<DataTemplate x:Key="MovieItemTemplate">
    <StackPanel>
        <Border BorderBrush="{StaticResource PhoneForegroundBrush}" BorderThickness="5" Margin="3" Height="215" Width="140">
            <Image x:Name="MovieCover"                                                                                
                    toolkit:TiltEffect.IsTiltEnabled="True"
                    Margin="0"
                    HorizontalAlignment="Center"
                    Width="140"
                    Height="210">
                <Image.Source>
                    <BitmapImage UriSource="{Binding Cover}" CreateOptions="BackgroundCreation"/>
                </Image.Source>
                <interactivity:Interaction.Triggers>
                    <interactivity:EventTrigger EventName="Tap">
                        <gsextra:EventToCommand Command="{Binding MainViewModel.MovieItemSelectedCommand, Source={StaticResource Locator}}"
                                                PassEventArgsToCommand="True"
                                                CommandParameter="{Binding MovieID}"
                                                ></gsextra:EventToCommand>
                    </interactivity:EventTrigger>
                </interactivity:Interaction.Triggers>
            </Image>
        </Border>
    </StackPanel>
</DataTemplate>

Итак, как вы можете видеть, у меня есть изображение внутри, которое будет загружать его контент из интернета через URI. Благодаря новой опции манго BackgroundCreation (ср. http://blogs.msdn.com/b/slmperf/archive/2011/06/13/off-thread-decoding-of-images-on-mango-how-it-impacts-you-application.aspx) он загружается в фоновом режиме.

Но у меня очень большая коллекция, и хотя я делаю «постраничную» привязку источника Listbox, я замечаю, что моя память продолжает увеличиваться, пока она не израсходует все и приложение не вылетит.

Затем я заметил это http://blog.wpfwonderland.com/2011/01/17/images-and-memory-leaks-in-windows-phone-7/, поэтому мне кажется, что мне нужно очистить само изображение из-за функции кэширования изображений в wp7.

Когда я делаю это, все прекрасно работает в отношении памяти, НО теперь каждый раз, когда пользователь «просматривает» страницы через список, необходимо перезагружать изображения, в результате чего приложение практически не используется ... потому что пользователь продолжает ждать этих изображений.

Какие-либо советы / хитрости о том, как это сделать?

Я также попробовал DefferedLoadListBox

...