Тема: Відображення декількох картинок зжириає багато оперативки

WPF. На формі 83 картинки. Використовую стандартний компонент Image. Зайнято оперативки: 569 Мб. І вони довго завантажуються. Я щось не помічав щоб в подібних обставинах Провідник розростався на сотні мегабайт чи навіть гігабайти.

2

Re: Відображення декількох картинок зжириає багато оперативки

Якщо картинок так багато, то кожна на екрані дуже маленька. Скоріше за все провідник генерує з цих картинок іконки того розміру, який буде показувати. Наприклад оригінальні картинки 8000х6000 пікселів. Але в іконках провідника показуються лише картинки 96х64 пікселя. Відповідно провідник при першому заході в папку генерує кеш іконок 96х64 пікселя. При наступних заходах він показує лише іконки з кешу, а не оригінали.
Можете видалити кеш провідника і проекспериментувати.

3

Re: Відображення декількох картинок зжириає багато оперативки

Зʼясувалося що є два способи

  • Відображення зменшених в розмірі (та опціонально з погіршеною якістю) зображень.

  • Завантаження та відображення не всіх картинок а лише частини.

При дійсно великій кількості картинок двоедеться суміщати та я обрав перший спосіб змінивши висоту зображень зі збереженням пропорцій програмою IrfanView.

В Windows forms відображення всіх цих картинок займає значно менше оперативки — десь 260 Мб.

4

Re: Відображення декількох картинок зжириає багато оперативки

Я той ще експерт з графіки, але те що знаю:

1. Відображення зображення в пам'яті займає більше ресурсів, так як воно зберігається в "сирому" вигляді. Тобто умовний jpeg націлений на максимальне стиснення, то 100 зображень може займати менше 2МБ на диску, але в ОЗУ це вже буде під 200МБ бо треба швидко відмальовувати кожен піксель.

2. WPF на відміну від WinForms працює як вектор, а також використовує апаратне прискорення. Це відїдає оперативку, але якщо на вікно накидати список з дуже багато компонентів, то WinForms з певної межі починає лагати або взагалі невірно відмальовувати елементи (останнє зумовлене тим що Win32 API працює з 2байтовими координатами, і легко вийти за цю межу).

3. Завантажувати 4к зображення щоб відобразити його як thumbnail -- погана ідея, і ви вірно зробили що зменшили їх.

4. WPF наче вміє сам розуміти які зображення немає сенсу тримати в RAM, але це треба дивитись детальніше.

5. Explorer використовує кеш thumbnails для відображення піктограм. Причому він окремий для кожного режиму перегляду (32х32 чи 256х256). Тому він не відїдає RAM, але щодо звернення до диску наче якраз завжди можна помітити як підвантажуються зображення, якщо файлів багато.

Ради експерименту спробував підвантажити сотню невеликих зображень, по RAM дійсно сумно, а от щодо швидкості наче все ок. Ще відмічу що очикуванно в Release відїдає менше RAM.

Цей контент доступний тільки зареєстрованим користувачам.