![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
Всем привет!
Наткнулся на одну непонятную мне весч. Может кто сможет пролить свет на проблему. В общем суть следующая: есть задача отображать BMP файлы на экране (800х600), да не просто их отображать - а 25 картинок в секунду (по таймеру). Дабы не было тормозов при отображении - приходится грузить сразу все BMP-шки в память. На машине стоит 1 гиг ОЗУ. Так вот - если объем загружаемых картинок + уже занятая память меньше 1 гига (во всяком случае мне показалось что именно такая закономерность), то картинки отображаются без проблем. Если же объем больше гига - отображается серый прямоугольник формы (FormBorderStyle=none). Тут начинается самое интересное - ожидание не приносит никаких результатов - форма как была серой, так ей и остается - до тех пор пока не нажать Ctrl+Alt+Del. После этого работа приложения прерывается стандартным диалогом WinXP. И уже после выхода из этого диалога (не важно какого: хоть TaskManager открывай, хоть Esc жми) всё начинает работать как положено. Пробовал сворачивать форму, переключаться между задачами - никакого результата. Собственно назревает вопрос: что это - мои кривые руки или какие-то глюки .net или GDI+? Пишу на .net 2.0. Система WinXP SP2. Релиз тестировался на двух машинах. Кусок кода прилагается. Буду рад любым ответам и предположениям. Спасибо.
|
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
sindi8, чисто навскидку предлагаю таймер с System.Windows.Forms.Timer сменить на System.Timers.Timer. А вдруг...
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Поставь try..catch, может оно вываливает OutOfMemoryException и не освобождает ресурсы. И сюда же: если юзается что-то, что в конце Dispos-ится, то удобнее использовать оператор using, т.к. ресурс будет гарантировано освобождён.
Кстати, отрисовывать по таймеру лучше так: в таймере делаешь Refresh формы, а рисуешь в обработчике события Paint, на Graphics-е, который в event args. -------------------- ![]() |
|||
|
||||
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
arilou, да таймер работает нормально.
Я в режиме отладки запускал - все команды выполняются. Никаких эксепшенов не выплёвывает. Блок try{} catch{} там уже есть. Но вот на вскидку - то что писал mr.DUDA по поводу рефреша - возможно подойдёт. Попробую. |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
||||
|
||||
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
|
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
sindi8, попробуй использовать DirectShow и его ф-ции потокового видео. Наверное, то, что ты делаешь сейчас, для WinForms - overkill
|
|||
|
||||
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
arilou, на DirectShow я это делал, и всё по большому счету работает, но есть определенные обстоятельства, по которым пришлось воспользоваться gdi+. Нет, то как это дело сейчас у меня работает - в принципе устраивает - но просто уже интересно стало - в чем может быть затык. Просто если бы это был действительно overkill - то всё не работало в общем-то. Но ведь работает, собака! Просто не совсем гладко начинает...
А на счет потокового видео - это функции всё таки для отображения видео, а у меня последовательность картинок. Это сообщение отредактировал(а) sindi8 - 29.9.2006, 19:44 |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
попробуй после graphics.DrawImage вставить graphics.Flush(FlushIntention.Sync). вдруг поможет..
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
ИМХО, не нужно грузить всё сразу. Разве эйсидиси загружает все картинки из папки в память? ИМХО, стоит вычислить сколько времени уходит на загрузку+показ картинки+её освобождение и уже из этого числа исходить.
-------------------- ![]() |
|||
|
||||
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
cully, не помогло...
Bogdan1024, я в первом посте написал что нужно отображать 25 кадров в секунду, так что сравнение с эйсидиси некорректно. Я не просмотрщик картинок делаю, мне нужно выводить графический фон, который бы не дергался (аналог анимации). Если он из оперативки не всегда успевает нормально прорисовывать всё, какое уж там чтение с жесткого диска... Это сообщение отредактировал(а) sindi8 - 4.10.2006, 12:16 |
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
||||
|
||||
| Guest |
|
|||
|
Unregistered |
arilou, вообще задача стояла следующая:
фон 25 кадров в секунду, поверх фона вывод текста по шаблону дизайна, антиалиасинг текста, текст должен быть всплывающим (эффект fade in, fade out и cross fade) - т.е. поддержка alpha-канала. У меня с surface не получилось сделать сглаживание для текста и как раз fades, а разбираться времени особо не было. В общем - по большому счету основная задача решена - все функции реализованы. Но вопрос топика рсиаеися открытым. |
|||
|
||||
| sindi8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 6.6.2005 Где: Москва Репутация: нет Всего: нет |
предыдущий пост мой - прошу прощения.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |