Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович

Хранитель экрана / Новый класс Graph

  • Третий урок
    Создание класса Graph и перенос в него всех действий с графикой.
  • Дата отправки отчёта: 12 июля 2015 г.
  • Задание выполнено: за 1 час. 40 мин.
  • Чему научился: Создавать классы, приводить код к более структурированному виду.
  • Что было сложным: ООП все таки не совсем понятно.. может дело привычки, может надо было теорию почитать таки :)
  • Комментарии: Все таки кружок у меня неравномерно движется, хотя, понимаю, что должен равномерно. Может с компьютером что не так? Посмотрел нагрузку в диспетчере задач так там Хранитель экрана проходит как ScreenSaver.vshost.exe *32 жрет 12-13% процессора и занимаемая память скачет 12832КБ-14896КБ. Я, конечно, еще совсем никакой программист, но не слишком ли много для программы гоняющей по экрану кружок? 12% от процессора Core i5 3.4G - это как бы можно траекторию ракеты на Марс рассчитать, а тут кружок...  Прикладываю видео чтоб можно было оценить.. может я и правда тут не просыхаю совсем? :)
  • Видеозапись: http://youtu.be/
  • Оценка видео-уроку:
Отчёт от 5244 за Хранитель экрана / Новый класс Graph




Оцени работу

 
Сохранить страницу:

5244. Олег
Олег
ответить
# Хранитель экрана / Хранитель экрана. Новый класс Graph / 2015-07-12 15:42

Вы будете смеяться, но вынос формы за пределы экрана абсолютно не влияет на загрузку, как показал только что проделанный мной эксперимент. :) Таймер на 25... и на 5 ставил и на 50 и на 100... везде примерно одно и тоже, заметность только чуть иная.


1. Евгений Волосатов
Евгений Волосатов
ответить
→  Олег  # Хранитель экрана / Хранитель экрана. Новый класс Graph / 2015-07-12 11:27

Мы же не занимались еще оптимизацией.


1726. Наталия
Наталия
ответить
→  Олег  # Хранитель экрана / Хранитель экрана. Новый класс Graph / 2015-07-12 11:21

Что касается неравномерности: скорее всего, нужно подкрутить таймер обновления формы: 25 мс вместо 100 мс, что по умолчанию, и пропорционально уменьшить скорость.


1726. Наталия
Наталия
ответить
→  Олег  # Хранитель экрана / Хранитель экрана. Новый класс Graph / 2015-07-12 11:13

На самом деле, не такая уж это и простая задачка - перерисоывать по несколько раз в секунду картинку большой площади.
В полете на Марс высчитывается какая-нибудь формула с сотней переменных, а тут над - над десятками тысяч точек выполняется множество битовых операций.
Что ресурс уходит на перерисовку можешь убедиться сам: частично вытащи форму за пределы рабочего стола - и увидишь, что Windows поняла, что скрытую часть экрана ей рисовать не надо, и ресурсов на перериросвку видимой пользователю части формы будет затрачено меньше.
Крутые видеоигры не так тормозят процесс т.к. там не происходит перерисовки всего экрана от левого верхнего пикселя до правого нижнего, а обновляется только изменившаяся часть.


5244. Олег
Олег
ответить
# Хранитель экрана / Хранитель экрана. Новый класс Graph / 2015-07-12 08:33

Нет, не запись... я заметил до записи. Но даже если комп перегружен, вроде как не должна бы такая программа 12% просить у проца, не для БК-0010 программы то пишем :)


986. Антон Лазарец
Антон Лазарец
ответить
→  Олег  # Хранитель экрана / Хранитель экрана. Новый класс Graph / 2015-07-12 07:58

Олег, может запись притормаживает его?


  • Отчёт оценивали:
    5344Владимир+1  

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: Научился выносить сходный функционал в отдельный класс.
Автор выбрал не тот конструктор за основной. Если выбрать за основной конструктор наиболее полный из них, то избежать повторного запуска кода легко. На скриншоте можно увидеть мое решение, как видно код инициализации повторно не выполняется. Еще как вариант (еще проще) - использование параметров по умолчанию, но конкретно в моем исполнении этот вариант не подошел, т.к. у меня по умолчанию в качестве фона используется "естественный" цвет формы Windows, а такой цвет не является константой и компилятор на него ругается.
Научился: 1)Создание элемента структурного типа. 2)Создание отдельного класса.
Трудности: Понять принцип взаимодействия классов между собой.
Уточнение: Дополнительный метод Graph позволяет добавлять дополнительные параметры и при этом можно параметры Color не приписывать в основном элементе, но при этом метод инициализации карандаша используется дважды. Дополнение от себя: Но если использовать лишь один метод Graph с четырьмя параметрами, то параметры Color необходимо будет прописать, но инициализация карандаша будет использовать лишь однажды как я понимаю. Вопрос заключается в следующем, что лучше : сразу прописать параметры, но невозможность использовать в основном элементе только ширину и высоту или создавать дополнительный метод с доп. параметрами, но с возможностью использовать только ширину и высоту?