В общем я сделал такой вывод: Артем не разбирается в сути того, что он использует, но считает, что оно лучше, чем что-либо. GDI - это основа графики в Windows ....
Слушай, брателло, ты принимаешь участие в бенчмаркинге? Нет? Тогда будь добр, просто промолчи, про себя подумай - ах, какой Аретм плохой, так ему и надо, а высказываться зедсь опять не нужно.
Просто тот факт, что ты по каждой теме хочешь что-то сказать, даже если тема тебя не касается, меня бесит.
Извини, хотел тебе это на мыло написать но, кажется, оно у тебя не работает, видимо.
Короче, это не по теме.
И плз, если хочешь ответить, ответь мне на мыло:
artyom@soobcha.org, а опять показывать какой ты умный не надо - все это и так знают.
Результаты сортируются в порядку увеличения времени.
Каждую процедуру запускаю по 5 раз, результат усредняю.
Мой код тоже выполняет 10 итераций, потом результат делит на 10.
Код GSerg выполняет только одну итерацию.
Результаты приводятся в мс.
Рисование линейной градиентной заливки и 40-угольника, каждые в вершины которого соединены между собой линиями
Рисование на dc окна:
cresta 366.6
GSerg 442.8
Artyom 8576.4
Я пока не могу объяснить причину такого отставания .NET - но подозреваю, что проблема с моей системой, ждем еще результатов crest'ы.
Также следует отметить, сто cresta сжульничал - рисует не диагональный градиент, а горизонтальный.
Рисование на dc битмапа:
cresta 104.8
Artyom 111.2
GSerg не принимал участие - жду себе на мыло и твой пример.
Итак, какие я могу сделать выводы.
Мы видим, что скорость работы GDI и GDI+ при выполнении элементарных операций практически не отличаются при условии вывода в битмап - разница составляет порядка 6-7%.
Также видим, что предварительное рисование в dc битмапа и последующий перенос изображения не только не замедляет работу, но и ускоряет ее.
Прокоментировать первый тест я не могу - что-то реально не то с моей машиной.
Кроме того, о квалификации программиста, комп которого работает в 100 раз медленнее при прочих равных, можно составлять анекдоты
Я говорил и еще раз повторю - я совершенно без знаний о терминалах пылатся настроить работу терминала (удачно, кстати). После этого я заметил, что отображение окон и прокрутка списков выполняется медленнее, чем обычно. На мою квалификацию скорость работы системы не влияет - можете не сомневаться.
И это прошу не коментировать.
Слушай, брателло, ты принимаешь участие в бенчмаркинге? Нет? Тогда будь добр, просто промолчи
Слушай, брателло, ты этот форум весь приватизировал или только право на тупость в нем? Форум общий и каждый может отвечать на вопросы, если придерживается правил.
Просто тот факт, что ты по каждой теме хочешь что-то сказать, даже если тема тебя не касается, меня бесит.
А меня радует тот факт, что твои посты резко улучшают мое настроение
Извини, хотел тебе это на мыло написать но, кажется, оно у тебя не работает, видимо.
И опять вранье, все у меня работает.
И плз, если хочешь ответить, ответь мне на мыло:
artyom@soobcha.org, а опять показывать какой ты умный не надо - все это и так знают.
Ты первым демонстративно запостил это, якобы у меня мыло не работает, так что и я отвечу тем же. А вообще, не выходил бы ты за рамки темы "эээээ", вдруг кто-то тебя всерьез воспримет, не прочитав ее?
Либо ты мне показываешь, где было оговорено, какой тип градиента должен быть, либо приносишь публичные извинения.
Нигде этого не было, просто Артемка похамить любит.
Для начала я жду объяснений по поводу заявления, что я жульничал.
Все объяснения я уже приводил.
Я рисовал диагональный градиент
GSerg рисовал диагональный градиент.
Если ты решил, что ты умнее всех и можешь рисовать обычный горизонтальный градиент, то бог тебе судья.
Свое мнение по этому вопросу я уже высказал.
Никаких извинений тебе приносить не будут.
Я жду.
Затем тебя ожидает ещё один неприятный момент.
Я рисовал диагональный градиент
GSerg рисовал диагональный градиент.
Если ты решил, что ты умнее всех и можешь рисовать обычный горизонтальный градиент, то бог тебе судья.
То, что ты рисовал диагональный градиент - это твои личные тараканы. То, что GSerg рисовал диагональный градиент - это его свободный выбор. Какой градиент рисовать, нигде не указывалось. Если ты считаешь себя обиженным этим фактом, извинись и поставь дополнительное условие.
Сейчас я сделал диагональный градиент. Рисует также, как и горизонтальный. Один в один.
Поэтому твои предположения о жульничестве пусть останутся на твоей совести.
Видимо ты не думал, что я закачаю framework и поверю твоим словам. Ты ошибся. Я его закачал. И установил. И запустил твою программу. То, что я увидел, мне не нравится.
Объясняю по пунктам, следи за мыслью:
GSerg прислал мне свой пример, но в нем один нюанс - он рисует прямо на PictureBox, а я - сначала в битмап в памяти, а потом этот битмап ложу на форму.
Ты заставил рисовать меня в промежуточный dc в памяти и затем перерисовывать в dc окна. Якобы ты делаешь также.
1.
После загрузки frameworka и запуска твоей программы сразу бросилось в глаза такое дело:
Я вижу, как рисуются последовательно все лучи, соединяющие вершины многоугольника. Идет последовательно по кругу отрисовка из каждой вершины круга. Если бы ты рисовал так же, как я, то процесса отрисовки лучей не было бы видно, т.к. это происходило бы в памяти. А после копировалось бы. НО: копирование не делается отдельно для каждого луча, и оно не делается ПО КРУГУ. Копируется растром. И весь рисунок сразу, не по одному лучу, т.к. в памяти нет отдельных лучей, есть только весь рисунок целиком.
2.
Далее, видя такое дело, я свернул твоё окно, и убрал за край экрана так, чтобы была видна только полоска с левой стороны формы, вмещающая только кнопку. Сам прямоугольный участок, на котором должно рисоваться - остался за экраном. И нажал кнопку. Угадай, сколько выскочило в MsgBox'е ? Правильно: 00:00:00. Твой битмап, который ты якобы рисуешь в памяти, не может отрисоваться за 0. Ни при каких условиях. Значит, ты его не рисуешь. Ты рисуешь сразу на dc формы, что подтверждается и тем, что я вижу, как по кругу отрисовываются лучи. Поэтому, когда рект находится за экраном, функция, заливающая окно и ф-ция, рисующая лучи, ничего не делают. Потому, что некуда рисовать. Отсюда и 0 времени.
Я не берусь огульно утверждать, в отличие от тебя, что ты жульничал. Ты мог просто не знать этого, прочитав слово Bitmap в коде, решить, что рисуется в памяти и затем копируется в dc формы. Поэтому из тех двух вариантов, что я сделал, соответствующим твоему является вариант Gradient_Direct.exe.
Вот и берем для сравнения твой вариант и мой Gradient_Direct.exe.
Результаты:
GDITesting.exe - 138 мс
Gradient_Direct.exe - 11 мс.
Отсюда имеем разницу в 12,5 раз.
Даже если сравнивать с тем вариантом, что рисует в память и затем в dc - 14 мс. то разница в 9,8 раз. Более чем убедительно.
P.S.
Когда выскакивает MsgBox, его верхние уголки скруглённые, и в том месте, где скругления, участок дорисовывающий MsgBox до прямоугольного окна, остается непрорисованным, в отличие от моего примера. Более того, если задвинуть твоё окно за экран, и запустить мою программу, нарисовать в ней рисунок, а затем нажать на твою кнопку, то MsgBox выскакивает над моим окном (оно стоит по центру экрана) и на моём рисунке этих серых треугольничков нет. Отчего бы это? Завтра будем разбираться. Будем караулить MsgBox, как только появится, постараюсь сразу же двинуть твоё окно в сторону и посмотрю, не смажется ли рисунок
Ты заставил рисовать меня в промежуточный dc в памяти и затем перерисовывать в dc окна. Якобы ты делаешь также.
Слушай, перечитай еще раз мой пост - внимательно и до конца.
И следующий за ним (начинается со слов "эээ, без самодеятельности ...". Может, тогда понятнее станет?
Почему промолчал, когда я прислал тебе заведомо более медленный вариант, неправильно поняв тебя? Хотел дивидендов с этого?
Чего цепляешься к способу заливки? Где-то оговаривал его? Заливка одинакова тик в тик горизонтальная и диагональная. Есть сомнения - файл с диагональю лежит тут:http://webfile.ru/261502
В общем, я вижу результат:
использование старых и непрогрессивных технологий, которые применял GSerg и которые применял я, дают результат порядка 10-11 мс.
Новая прогрессивная технология .нет дает результат 138 мс.
Думаю, что трудно винить меня и GSerg'a в том, что мы сговорились и у нас одинаковые результаты.
Не вижу более причин находиться тут в ожидании новых попыток доказать недоказуемое Задач, которые может решать компьютер столько, что не хватит жизни протестировать их все. И у меня нет времени тестировать их, ожидая, когда ты сможешь показать мало-мальски достойный результат. Чтобы сделать это, учи программирование. С самых азов. Со столь презираемого тобой ассемблера. Может станешь когда-нибудь профессионалом. На деле, а не в своём воображении. Как например GSerg, который знает и может на порядок больше меня и на два порядка больше тебя.
Грозился пригласить профессора - пригласи. Пусть полюбуется на своего ученика.
Помнишь свою фразу: В руках у меня самый мощный, высокотехнологичный и прогрессивный инструмент. А у тебя всего лишь ассемблер.
Чтобы побить тебя с твоим инструментом, мне хватит даже ассемблера. Более чем достаточно.