| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Быстродействие при работе с графикой |
| Автор: Artemon 20.12.2006, 14:25 | ||||
| Я сделал программу, которая читает BMP напрямую из файла на C++Builder, затем решил переписать ее на C#. Переписал и очень удивился, когда обнаружил, что скорость загрузки изображения в C# в 2 раза меньше чем в C++. Скорость теряется в следующем куске:
Аналогичный код в C++
Может быть можно как-то оптимизировать данный кусок? |
| Автор: Naum 20.12.2006, 14:56 |
| Попутный вопрос (может быть и ответом в этом топике). C++ Builder работает с GDI или с GDI+? |
| Автор: ivashkanet 20.12.2006, 15:12 | ||
Т.е. прочитала пару байт --- поставила пиксель на картинке? Тогда это еще хорошо что всего двукратное падение Get/SetPixel работает не очень рационально. Это все плата за безопасность кода и др... Вариантов два: 1) Лучший:
2) Если нужна обработка пикселей до помещения в картинку нужно использовать неуправляемую память. т.е. unmanagement code |
| Автор: juravel 20.12.2006, 17:28 | ||
.
Можно залочить картинку в массив и работать с ним А как? |
| Автор: mr.DUDA 20.12.2006, 19:09 |
http://forum.vingrad.ru/index.php?showtopic=95499&view=findpost&p=727772 |
| Автор: ivashkanet 20.12.2006, 19:14 | ||
Вот пример из MSDN
|
| Автор: juravel 21.12.2006, 17:37 |
| Спасибо , mr.DUDA |
| Автор: mr.DUDA 21.12.2006, 22:27 |
| Пожалуйста. |
| Автор: Madrid 21.12.2006, 23:23 |
| А как вообще можно померить скорость загрузки, к примеру, той же картинки? |
| Автор: mr.DUDA 22.12.2006, 09:17 | ||
Одна тема - один вопрос, но по существу: запоминаем время до загрузки, и сразу после загрузки. Вычитаем одно время из другого, получаем TimeSpan. Полное количество прошедших миллисекунд будет в св-ве TotalMilliseconds. Для операций, занимающих малое время (как загрузка небольшого битмапа) время будет настолько малым, что его не замерить таким способом - всегда будет возвращать случайное число = кванту времени потока (от 0 до 15..16 миллисекунд). Поэтому чтобы получить более-менее достоверный результат, нужно повторить операцию N раз и замерить общее время, которое разделить на N - это и будет искомое время выполнения. З.Ы. или профайлер юзать, как вариант |
| Автор: Madrid 22.12.2006, 17:05 | ||
извиняюсь за |
| Автор: ivashkanet 22.12.2006, 17:22 |
| Madrid, http://forum.vingrad.ru/index.php?showtopic=115380&hl=%D0%BF%D1%80%D0%BE%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%D1%80 Добавлено @ 17:24 и http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%D1%80 |
| Автор: mr.DUDA 22.12.2006, 18:22 |
| http://www.jetbrains.com/profiler/ рулит однозначно! |