2015-01-29 17 views
6

Windows Phone 8.1 uygulaması yapıyorum (Windows Runtime, Windows Phone Silverlight 8.1 değil). Uygulamamda, GridView'daki tüm CameraRoll fotoğraflarını, ancak bellek kullanımını azaltmak için Küçük Resimler olarak görüntülemem gerekiyor. Uygulamamı denediğimde, her şey iyi çalışıyor, ancak bu yavaş yavaş. |Windows Phone 8.1 - Kamera Rulosundan Thumbnail görüntüleri almaya çalışırken kötü performans

===================== MainPage.xaml.cs============================= 
var files = await KnownFolders.CameraRoll.GetFilesAsync(); 
List<ImageSource> imageSources = new List<ImageSource>(); 

for(int i=0; i<files.Count; i++) 
{ 
    await ExecuteCode(i, files, KnownFolders.CameraRoll, imageSources); 
} 

photosGrid.DataContext = imageSources; 

private async Task ExecuteCode(int index, IReadOnlyList<StorageFile> files, StorageFolder folder, List<ImageSource> imageSources) 
    { 
     uint requestedSize = 90; 

      using(StorageItemThumbnail itemThumbnail = await files[index].GetThumbnailAsync(ThumbnailMode.PicturesView, requestedSize)) 
      { 
       using(IRandomAccessStream fStream = itemThumbnail.AsStreamForRead().AsRandomAccessStream()) 
       { 
        BitmapImage bitmapImage = new BitmapImage(); 
        await bitmapImage.SetSourceAsync(fStream); 

        imageSources.Add(bitmapImage); 

        bitmapImage = null; 
        GC.AddMemoryPressure((long)itemThumbnail.Size); 
       } 
      } 
    } 

========================MainPage.xaml========================== 
<GridView x:Name="photosGrid" Height="392" Width="400" ItemsSource="{Binding}" Margin="0,0,-0.333,0" SelectionMode="Multiple" Background="Black"> 
         <GridView.ItemTemplate> 
          <DataTemplate> 
           <Image Width="90" Height="90" Margin="5" Source="{Binding}" Stretch="UniformToFill"/> 
          </DataTemplate> 
         </GridView.ItemTemplate> 

         <GridView.ItemsPanel> 
          <ItemsPanelTemplate> 
           <ItemsStackPanel /> 
          </ItemsPanelTemplate> 
         </GridView.ItemsPanel> 
        </GridView> 
+0

Bunun için bir yanıtınız var mı? Ayrıca bir galeri görüntüleyici oluşturmaya çalışıyorum ama bir klasörden 100'den fazla fotoğraf getirirsem, App System.OutOfMemoryException ile çöküyor. – AbsoluteSith

+1

AddMemoryPressure çağrısını kaldırırsanız ne olur. Bunu yapman gerektiğine emin değilim. AddMemoryPressure komutunun belgelenmesi, gerekmediğinde tam olarak aynı miktarda basıncı kaldırmanız gerektiğini belirtir. Aksi takdirde sistem performansı etkilenir. https://msdn.microsoft.com/en-us/library/system.gc.addmemorypressure%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – AndrewJE

+0

Görüntüleri Bitmap'lere doğrudan yoldan yükleme hakkında ? Daha sonra bunları kısıtlamak için DecodePixel Genişliği ve Yüksekliğini kullanabilirsiniz. Ayrıca, eğer kullanıcı sadece bir kısmını görürse, tüm resimleri bir kerede yüklemeyin. – Filip

cevap

İlgili konular