Dans cet article, je vais essayer de vous faire gagner du temps. Si vous êtes fatigué, et foncez tête baissée tout en n'étant absolument pas concentré sur votre code, vous risquez de faire la même bêtise que moi.

Ce que j'ai fait, et qu'il ne faut pas faire


Si vous reproduisez le code écrit ci-dessous, soit vous êtes fous ou curieux car je vous ai dit qu'il ne faut pas le faire, soit vous risquez de faire freezer votre machine. Ou les deux.

            FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".png");
picker.FileTypeFilter.Add(".jpg");
//picker.FileTypeFilter.Add(".gif");
//picker.FileTypeFilter.Add(".bmp");
picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
picker.ViewMode = PickerViewMode.Thumbnail;
file = await picker.PickMultipleFilesAsync();
foreach (StorageFile oneFile in file)
{
var stream = await oneFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
BitmapImage image = new BitmapImage();
image.SetSource(stream);
//picsCollection.Add(new PicsItem { src = image });
picsCollection.Add(new PicsItem(image));
}

Le résultat fait peur: je suis monté pour ma part à 1500Mo de RAM consommés pour 8 photos ajoutées...
Cela vient du fait que l'on utilise ici un canon laser pour tuer une mouche. Pourquoi ouvrir un fichier dans sa totalité pour l'afficher en 250x250 dans une GridView? Inutile.

 Ce qu'il faut réellement faire

            FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".png");
picker.FileTypeFilter.Add(".jpg");
//picker.FileTypeFilter.Add(".gif");
//picker.FileTypeFilter.Add(".bmp");
picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
picker.ViewMode = PickerViewMode.Thumbnail;
file = await picker.PickMultipleFilesAsync();

foreach (var filename in file)
{
var properties = await filename.GetThumbnailAsync(ThumbnailMode.PicturesView, 280, ThumbnailOptions.None);

BitmapImage image = new BitmapImage();
image.SetSource(properties);
picsCollection.Add(new PicsItem { uriSrc = image });
}
picsSelectedFlipView.ItemsSource = picsCollection;


Plus propre, n'est-ce pas? Ici on appelle uniquement une Thumbnail (comprenez un aperçu de la photo), d'une taille de 280 pixels max de côté. C'est amplement suffisant, et surtout, cela consomme environ 50Mo pour 50 photos prises avec un smartphone.

En espérant avoir aidé certains d'entre vous sur la toile !