#c_sharp #wpf
Я загружаю изображения 240 штук в ListBox. Но у меня этот процесс отнимает 1600 мб оперативной памяти и я никак не могу освободить эту память. Другие программы, как к примеру Nvidia Geforce Experience показывает все картинки и оперативную память больше 10-15 мб не занимает Каким образом можно реализовать показ картинок в папке? Разметка XamlЛогика C# //Загружаем все изображения private void Screenshots_LoadAll() { string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\GTA San Andreas User Files\SAMP\screens"; var dirs = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".png") || s.EndsWith(".jpg")); foreach (string dir in dirs) { ListBox_Screenshots.Items.Add(new ImageScreen() { imgSource = dir }); } //Запускаем функцию на ожидание создания или удаления файлов Screenshots_StartWatch(path); } //Смотрим на создание или удаления файла private void Screenshots_StartWatch(string path) { FileSystemWatcher watch = new FileSystemWatcher(); watch.Path = path; watch.Created += new FileSystemEventHandler(Screenshots_OnCreated); watch.Deleted += new FileSystemEventHandler(Screenshots_OnDeleted); watch.EnableRaisingEvents = true; bIsScreenshotsWatching = true; } public class ImageScreen :IDisposable { public string imgSource { get; set; } public void Dispose() { imgSource = null; } }
Ответы
Ответ 1
Для того чтобы не заморачиваться с созданием миниатюр, сначала рекомендую попробовать воспользоваться штатными средствами WPF. Класс BitmapImage имеет ряд свойств предназначенных для этого, в частности DecodePixelWidth и DecodePixelHeight Например, добавление одной строчки:Позволило снизить потребление ОЗУ на стандартных обоинах Windows 7 с ~440 до ~95 МБ, причем приложение вообще без картинок занимает ~65 МБ. До: После:
Комментариев нет:
Отправить комментарий