![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| Kaerus |
|
|||
|
WPF'er ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 3.9.2010 Репутация: 1 Всего: 1 |
Многие наверное знают Cooliris, меня заинтересовал ее 3D интерфейс, решил реализовать его на чистом WPF 3D (без DirectX и т.п.). Специфика программы что требуется за раз создать около 90 BitmapImage из списка Uri. Все вроде бы оптимизировал, что бы изображения грузились быстрее, да они и так в фоне грузяться и теор. не должны мешать UI Thread, хотя создаваться он должен именно в потоке UI (так как BitmapImage привязан к диспетчеру)
Вот тут и весь подвох: создания одного BitmapImage (просто вызов new BitmapImage(uri) ) отнимает около 15мс, а их нужно 90 => 0.015*90 ~ 1.3 сек. Ладно это не заметно когда изображения сами подгружаются секунд 5-10 и камера статична. Но если при этом камерой вращать влево-вправо, а когда ее отпускаешь она сама поворачивается на место (с помощью анимации) -> вот и появляется дерганье и зависания короткие, но периодические (юзабилити страдает :( Что пытался сделать: 1) Изменить DispatcherPriority до минимума в методе добавления ссылок в ObservableCollection - не помогло, только изображения стали позже появляться 2) Создавать BitmapImage в другом потоке, замораживать его и передавать UI - проблема оказалась в том что нельзя заморозить BitmapImage созданный из ссылки на изображение в WWW 3) Загружать вручную изображение в /Temp папку и из него уже создавать BitmapImage, замораживать и отправлять UI - РАБОТАЕТ (дергание анимации исчезло), но создаются куча ненужных файлов. Потом непонятно как там кеширование выполняется, раньше все на автомате кешировалось
, а теперь не знаю ВОПРОСЫ: 1) Как можно создать BitmapImage в другом потоке из инета и передать его UI 2) Как можно только 1 раз создать пустой BitmapImage, и менять в нем только UriSource (лично у меня все время ошибки вылетают при этом) 3) Может у кого есть другие идеи по оптимизации Это сообщение отредактировал(а) Kaerus - 13.12.2010, 22:09 |
|||
|
||||
| Kaerus |
|
|||
|
WPF'er ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 3.9.2010 Репутация: 1 Всего: 1 |
В общем разобрался, решение оказалось радикальным - перевел все на XNA. Плюсов немерено: программа стала просто летать даже на нетбуках (со встроенной видюхой), жрать меньше память, не требуются диспетчеры потоков, более удобная анимация. Все-таки 3D в WPF жутко тормозное.
P.S. При этом сам интерфейс остался на WPF (на хабре есть статья по теме) Это сообщение отредактировал(а) Kaerus - 29.12.2010, 02:08 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |