none
Consumo excesivo de memoria al cargar muchas imágenes WPF RRS feed

  • Pregunta

  • Estimados,

    Tengo un problema de memoria al cargar múltiples imágenes (mas de 2000) en un ItemsControl, la memoria se dispara a 200.000 mb.

    Las imágenes a mostrar se repiten (son maximo 20 diferentes) entonces querría crear los 20 tipos de imagenes distintas y luego asignarselas al data template del itemControl para no crear 2000 objetos de los cuales 100 se repiten.

    El problema es que no se como solucionar esto realizando bindings.

    Alguna ayuda?

    Gracias!!!!

    Código:

    <ItemsControl x:Name="items">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <WrapPanel/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <Grid x:Name="LayoutRoot" Background="Transparent" >
                                          <StackPanel Height="90" Width="58" >
                                               <Image  Height="36" HorizontalAlignment="Center" Margin="0,5,0,0" Name="imagen" Stretch="Fill" 
                                                        Cursor="Hand" VerticalAlignment="Top" Width="36" Tag="{Binding Path}" Source="{Binding ImagePath}" MouseLeftButtonDown="FileElement_MouseLeftButtonDown" />
                                               <TextBox Height="45" HorizontalAlignment="Center" TextAlignment="Center"  Name="textbox" VerticalAlignment="Top" Width="58"
                                                        Text="{Binding Name}" Foreground="White" TextWrapping="Wrap" Background="Transparent" BorderThickness="0" BorderBrush="Transparent" Cursor="Arrow" />
                                          </StackPanel>
                                    </Grid>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>

     

    viernes, 18 de mayo de 2012 19:13

Todas las respuestas

  • ¡Hola!

    A mi se me ocurre que podrías crear un IValueConverter donde pondrías la lógica de las 20 fotos diferentes y Blindearia a un valor. Dependiendo de ese valor, el convert me cargaría la foto correspondiente.

    Un saludo,

    • Propuesto como respuesta noexisto007 sábado, 26 de mayo de 2012 6:35
    viernes, 18 de mayo de 2012 19:32
  • ¡Hola!

    A mi se me ocurre que podrías crear un IValueConverter donde pondrías la lógica de las 20 fotos diferentes y Blindearia a un valor. Dependiendo de ese valor, el convert me cargaría la foto correspondiente.

    Un saludo,

    Hola, gracias por la respuesta.

    Hice lo que propusiste pero el consumo de memoria siguió siendo excesivo.

    Al final lo resolví utilizando virtualización en el wrap panel.

    Muchas gracias!

    Saludos,

    • Propuesto como respuesta noexisto007 sábado, 26 de mayo de 2012 6:36
    lunes, 21 de mayo de 2012 19:57