2017-08-21 7 views
0

Afin d'apprendre comment développer sur C# et Visual Studio j'ai fait une application UWP hors ligne pour lire Comic/Manga stocké dans ma tablette Windows.
L'une des principales étapes était de prendre le répertoire relatif de chaque image dans un épisode et de créer une image bitmap de chacun pour les charger dans FLipView.Utilisation du bitmap de BitmapImage dans UWP

Actuellement, je fais de cette façon:

foreach (String value in ImageDirectory) 
{     
    StorageFile file = await StorageFile.GetFileFromPathAsync((value)); 
    IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
    image = new BitmapImage(); 
    await image.SetSourceAsync(fileStream); 
    images.Add(image); //images is a <List> of BitmapImage 
} 

Dans le cas le plus extrême que j'ai, avec 124 images (50,1 Mo sur disque) lors du chargement qu'ils utilisent environ 860 Mo de RAM qui semble excesive. Je sais que charger toutes les images comme on n'est pas l'approche la plus efficace, où une solution plus sur-demad serait mieux, mais finalement mes questions sont:

Y at-il un meilleur (qui utilise moins RAM) façon de charger les images?

+0

Quel est le type d'image source? Sont les jpegs, pngs, ou quoi? – TomServo

+0

Par défaut, ** FlipView prend en charge la virtualisation **. FlipView est un [ItemsControl] (https://msdn.microsoft.com/library/windows/apps/BR242803) contrôles dérivés et son [ItemsPanel] (https://msdn.microsoft.com/library/windows/apps/ windows.ui.xaml.controls.itemscontrol.itemspanel.aspx) est [VirtualizingStackPanel] (https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.virtualizingstackpanel) qui est un panneau de virtualisation, de sorte qu'il prend en charge la virtualisation de l'interface utilisateur. Pour plus d'informations, consultez [cette question] (https://social.msdn.microsoft.com/Forums/windowsapps/en-US/7c6d0cdb-63c4-4f25-b2ea-f4f0cacb730d). –

+0

Pour réduire l'utilisation du RAM, assurez-vous de ne pas modifier le ItemsPanel de FlipView (en cas de changement, veuillez utiliser un panneau de virtualisation). Ensuite, vous pouvez essayer de combiner avec la virtualisation de données pour voir si cela aide. Pour plus d'informations, consultez [ListView et la virtualisation des données GridView] (https://docs.microsoft.com/en-us/windows/uwp/debug-test-perf/listview-and-gridview-data-optimization). –

Répondre

1

Vous devez garder à l'esprit que les images chargées en mémoire ne sont pas compressées comme sur votre disque. Ils sont traités comme des bitmaps (non compressés)

si vous voulez voir un aperçu de toutes les images sur votre disque, une bonne approche consiste à redimensionner vos images en mémoire, comme dans How to Copy and Resize Image in Windows 10 UWP, et charger l'image complète sur demande.

+0

Sonne comme une réponse équitable, en jouant avec l'application Windows Photo, je peux le voir utilise également un peu de RAM (même si ce n'est pas une comparaison tout à fait juste). Maintenant, je pense que je peux dormir à l'aise. – Micheleuno