Kreslení řetězců - Rychlost ExtTextOut a DrawText
Posted: 27 Apr 2009, 18:58
Dobrý den,
tento příspěvek je inspirován mým nedávným objevem, jak řešit problém s HEX režimem. Porovnával jsem různé metody kreslení a jejich rychlost. Třeba to někomu pomůže Třeba tímto vláknem popostrčím File Comparator, aby byl rychlejší při kreslení v binárním porovnávání
Ve zkratce:
Kdykoliv je to možné, místo DrawText používejte ExtTextOut! ExtTextOut je mnohonásobně (8x) rychlejší než DrawText.
Testy:
2000x DrawText(..., DT_NOPREFIX | DT_SINGLELINE) cca 5 sekund
2000x ExtTextOut(...) cca 0,65 sekund
Další funkce na výpis textu:
- TextOut - zjednodušená verze ExtTextOut, Rozdíl v rychlosti minimální - cca 0,65 sekund
- PolyTextOut - jen WinNT, umožňuje více volání ExtTextOut v jednom balíku - jeden balík 2000 řetězců cca 0,60 sekund
- TabbedTextOut - ??? názvem naznačuje základ ExtTextOut, ale s rychlostí DrawText - cca 5 sekund
- DrawTextEx - vylepšená verze DrawText - cca 5 sekund
Poznámky:
- Rozdíl v rychlosti TextOut a ExtTextOut jsem při mé nepřesnosti měření nezaznamenal. (Inspirace: KB71230: INFO: ExtTextOut() Instead of TextOut() to Improve Performance)
- Zjišťoval jsem, zda předpočítání lpDX parametru funknce ExtTextOut zrychlí dále výpis. Mám pocit, že výsledek byl opačný - mírné zpomalení, ale které nemohu vzhledem k nepřesností měření podložit.
Měření:
- čas byl měřen pomocí QueryPerformanceCounter() a QueryPerformanceFrequency()
- meření probíhalo s Wide (Unicode) verzemi API funkcí
- řetězec byl 133 znaků dlouhý obsahující znaky pouze z Basic Latin bloku
- kreslení probíhalo přes sebe v jednoduchém cyklu
- první znak se v každém kroku měnil
- nepřesnost/odchylka měření mezi různými pokusy byla cca 10%
- EDIT: Windows XP SP3, ATI Radeon HD 3200 + Catalyst 09.3
- EDIT: Použitý font: Consolas + ClearType Antialiasing
tento příspěvek je inspirován mým nedávným objevem, jak řešit problém s HEX režimem. Porovnával jsem různé metody kreslení a jejich rychlost. Třeba to někomu pomůže Třeba tímto vláknem popostrčím File Comparator, aby byl rychlejší při kreslení v binárním porovnávání
Ve zkratce:
Kdykoliv je to možné, místo DrawText používejte ExtTextOut! ExtTextOut je mnohonásobně (8x) rychlejší než DrawText.
Testy:
2000x DrawText(..., DT_NOPREFIX | DT_SINGLELINE) cca 5 sekund
2000x ExtTextOut(...) cca 0,65 sekund
Další funkce na výpis textu:
- TextOut - zjednodušená verze ExtTextOut, Rozdíl v rychlosti minimální - cca 0,65 sekund
- PolyTextOut - jen WinNT, umožňuje více volání ExtTextOut v jednom balíku - jeden balík 2000 řetězců cca 0,60 sekund
- TabbedTextOut - ??? názvem naznačuje základ ExtTextOut, ale s rychlostí DrawText - cca 5 sekund
- DrawTextEx - vylepšená verze DrawText - cca 5 sekund
Poznámky:
- Rozdíl v rychlosti TextOut a ExtTextOut jsem při mé nepřesnosti měření nezaznamenal. (Inspirace: KB71230: INFO: ExtTextOut() Instead of TextOut() to Improve Performance)
- Zjišťoval jsem, zda předpočítání lpDX parametru funknce ExtTextOut zrychlí dále výpis. Mám pocit, že výsledek byl opačný - mírné zpomalení, ale které nemohu vzhledem k nepřesností měření podložit.
Měření:
- čas byl měřen pomocí QueryPerformanceCounter() a QueryPerformanceFrequency()
- meření probíhalo s Wide (Unicode) verzemi API funkcí
- řetězec byl 133 znaků dlouhý obsahující znaky pouze z Basic Latin bloku
- kreslení probíhalo přes sebe v jednoduchém cyklu
- první znak se v každém kroku měnil
- nepřesnost/odchylka měření mezi různými pokusy byla cca 10%
- EDIT: Windows XP SP3, ATI Radeon HD 3200 + Catalyst 09.3
- EDIT: Použitý font: Consolas + ClearType Antialiasing