2015-01-29 2 views
6

Windows Phone 8.1 앱 (Windows Runtime, Windows Phone Silverlight 8.1 제외)을 구축하고 있습니다. 내 응용 프로그램에서는 CameraRoll의 모든 사진을 GridView에 표시해야하지만 Thumbnails로 메모리 사용을 줄여야합니다. 내 애플 리케이션을 시도 할 때, 모든게 잘 작동하지만, 아주 천천히. |Windows Phone 8.1 - 카메라 롤에서 축소판 이미지를 얻으려고 할 때 성능이 저하됩니다.

===================== 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

아무도 대답이 없습니까? 또한 갤러리 뷰어를 만들려고하지만 폴더에서 100 개 이상의 사진을 가져 오는 경우 App이 System.OutOfMemoryException과 충돌합니다. – AbsoluteSith

+1

AddMemoryPressure 호출을 제거하면 어떻게됩니까? 나는 당신이 그렇게 할 필요가 있는지 확신하지 못합니다. AddMemoryPressure 명령에 대한 설명서에는 필요하지 않을 때 정확히 같은 양의 압력을 제거해야한다고 나와 있습니다. 시스템 성능은 영향을받지 않습니다. https://msdn.microsoft.com/en-us/library/system.gc.addmemorypressure%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – AndrewJE

+0

이미지를 경로에서 직접 비트 맵으로로드하는 방법은 무엇입니까? ? 그런 다음 DecodePixel Width 및 Height를 사용하여이를 제한 할 수 있습니다. 또한 사용자가 일부만 보는 경우 한 번에 모든 사진을로드하지 마십시오. – Filip

답변