В общем сравнивал скорость работы GDI и GDI+ на паре карточек(MX400 и X600), рисуя разные фигуры как оконном контексте, так и на битмапе( который судя по филрейту иногда располагался в видеопямяти, иногда в обычной).
Заметил ряд малопонятных особенностей:
1) простые линии через GDI+ рисуются в 10-100 раз медленне чем через GDI.
2) если акселератор не поддерживает градиентную заливку, то FillRectangle c LinearGradientBrush (при выключенном сглаживании) работают в 2-3 раза медленне, чем GradientFill. но если акселератор это поддерживает (а X600 поддерживает) разрыв примерно 50-100 раз. То есть GDI+ для градиентов не испольует возможности карты
3) обычный эллипс в GDI быстрее в 2-5 раза.
4) включение антиалиасинга сильно тормозит GDI+, и я не нашел в DDI следов поддержки его для линий.
соответсвенно вопросы:
1) можно ли какими нибудь настройками приблизить GDI+ по скорости рисования обычных линий, эллипсов и градиентных прямоугольников к GDI?
2) не изменился ли интерфейс DDI от того что описан в январском MSDN?
Здравствуйте, PoM-PoM 40mm, Вы писали:
хъ
PP4>1) можно ли какими нибудь настройками приблизить GDI+ по скорости рисования обычных линий, эллипсов и градиентных прямоугольников к GDI?
Расскажу только о своих экспериментах с линиями. У меня была задача отрисовки осциллограммы в виде "бегунка". На каждый отсчет сначала часть предыдущего изображение стиралось (заливка узкого вертикального прямоугольника) потом рисовалась линия.
Вот результаты (в попугаях, std — обычный GDI)
std — 15.225 (pat blt)
std mem dc — 20.943 (pat blt)
gdi+ — 1.645.912
std & gdi+ — 1.586.535 (прямоугольник — стандартный GDI, линия — GDI+)
std & gdi+ mem dc — 550.875; 556.219; 473.321 (прямоугольник — стандартный GDI, линия — GDI+ с исп. доп. Graphics в памяти + DrawImage)
gdi+ mem dc — 609.270; 516.682; 563.351
gdi+ mem dc + lock — 544.563; 532.777; 480.011; 497.044; 473.801; 416.482; 384.551; 502.702 (прямоугольник — GDI+ LockBits, линия — GDI+ с исп. доп. Graphics в памяти + DrawImage)
Можно еще попробовать заменить DrawImage на LockBits. Руки не дошли, поскольку один хрен не устраивает по скорости, а без антиалиасинга (да и не сильно радикально он влияет) оно мне без надобности. Проверялось на ATI 9600 Pro.
Также немного помогает CS_OWNDC и однократное создание Graphics, а не на каждую отрисовку.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>