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>
아무도 대답이 없습니까? 또한 갤러리 뷰어를 만들려고하지만 폴더에서 100 개 이상의 사진을 가져 오는 경우 App이 System.OutOfMemoryException과 충돌합니다. – AbsoluteSith
AddMemoryPressure 호출을 제거하면 어떻게됩니까? 나는 당신이 그렇게 할 필요가 있는지 확신하지 못합니다. AddMemoryPressure 명령에 대한 설명서에는 필요하지 않을 때 정확히 같은 양의 압력을 제거해야한다고 나와 있습니다. 시스템 성능은 영향을받지 않습니다. https://msdn.microsoft.com/en-us/library/system.gc.addmemorypressure%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – AndrewJE
이미지를 경로에서 직접 비트 맵으로로드하는 방법은 무엇입니까? ? 그런 다음 DecodePixel Width 및 Height를 사용하여이를 제한 할 수 있습니다. 또한 사용자가 일부만 보는 경우 한 번에 모든 사진을로드하지 마십시오. – Filip