![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
San4o_Pan4o |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
В общем такая проблема: в ListView хочу показывать картинки. Опрашиваю какую-нить директорию на файлы *.jpg и их потом показываю как айтемы в ListView. Проблема в том, что если картинок много, оперативка кушается со зверским аппетитом.. Может кто-то сталкивался и поборол такое?
|
|||
|
||||
dazy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 3 Всего: 8 |
Картинки меняют размер?
На диске у наверно 800х600, а в ListView 50х50 так? |
|||
|
||||
San4o_Pan4o |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
картинки на диске большие, да. Тут два варианта: либо грузить их полными, но в визуальном контейнере уменьшать, либо грузить их маленькими, задавая PixelDecodeWidth или PixelDecodeHeight. В обоих вариантах объем оперативки линейно растет от числа картинок. Просто во втором случае он меньше, чем в первом, но все же это проблема.. VirtualizingStackPanel не решает проблему, он удаляет визуальные контейнеры по мере их выхода из области видимости, но не чистит эти картинки из кэша.. Может есть штатный механизм для работы с памятью по принципу Recycling'а? Или идеи/примеры по реализации нештатного?
|
|||
|
||||
San4o_Pan4o |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
есть у кого-нибудь идеи хотя бы?
|
|||
|
||||
knox |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
что за картинки (разрешение) и сколько занимают памяти, и сколько штук ?
|
|||
|
||||
-Mikle- |
|
||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Можно использовать событие VirtualizingStackPanel.CleanUpVirtualizedItem. Оно вызывается для каждого элемента отдельно при очистке. Только я не смог добраться до самого Image, так как он у меня в DataTemplate. Наверняка это как-то просто и кто-то из форумчан знает как. Я это чувствую!!!
![]() Вот мой код XAML:
и обработчик:
Осталось только добраться до Image и грохнуть Bitmap!!! ![]() -------------------- Если тебе плюют в спину, значит ты впереди... |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
До Image, возможно, получится добраться, используя Logical-/VisualTreeHelper
-------------------- СУВ, Partizan. |
|||
|
||||
San4o_Pan4o |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
ну чё-то поколдовал... не очень выходит.. Partizan, а можно поподробнее про Logical-/VisualTreeHelper? Проблема становится актуальнее, т.к. если начать менять, например, размер контейнеров динамически (дергать бегунок), то по будут перерисовываться 2000 картинок вне поля зрения можно поседеть.. Че мог, перепробовал..
|
|||
|
||||
-Mikle- |
|
||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Ты хоть бы что-то сказал про то, как ты сами картинки грузишь.
DataTemplate? Image? Кодом? Или как? Может быть тебе свой контрол сделать, наследованный от Image или от FrameworkElement? Ничего не понятно... что-нить расскажи о том, как ты делаешь... У DataTemplate есть метод FindName может оно тебе поможет в обработчике события который я показывал выше. Есть еще:
или
Задающие параметры кэша и его реинициализации при масштабировании. Поскольку в WPF данные отделены от их представления (кнопка может иметь дерево вложенных объектов рисования), то может понадобится доступ к такому визуальному дереву. Статический класс VisualTreeHelper имеет набор методов для доступа к дереву Visual-объектов. LogicalTreeHelper - дает доступ к логическому дереву. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||
|
|||||
San4o_Pan4o |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
Итак, рассказываю. Сначала было тупое кодирование: т.е. на форме ListView, потом опрос какой-нибудь директории на наличие *.jpg и для каждого создание визуального контейнера (StackPanel с имэджэм и подписью). Потом решил отказаться от этого и сделал через ObjectDataProvider и DataTemplate's на основе какого-то из примеров MSDN + мои модификации.
А вот классы фоток:
Это сообщение отредактировал(а) San4o_Pan4o - 10.3.2009, 18:48 |
||||
|
|||||
San4o_Pan4o |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
Еще хотелось бы ускроить загрузку приложения. тут такой момент: при запуске сплэш-скрин висит и растет память, на ~300 5Мп фотках она ползет где-то до 150 метров, потом падает до 80 и стабилизируется, в этот же момент само приложение показывается. Вот это ползание как можно устранить? Т.е. сначала просто загрузить только те картинки, что в области видимости при старте, а потом по требованию остальные грузить
|
|||
|
||||
San4o_Pan4o |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
где же Вы, гуру?..
|
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Есть одна задумка. Часов через 7-8 буду дома, напишу...
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
Можно наверное....если использовать VirtualizingPanel -------------------- СУВ, Partizan. |
|||
|
||||
San4o_Pan4o |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.12.2007 Репутация: нет Всего: нет |
не помогает, везде где только можно ее включил - не полегчало:( |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |