GDI+ ํŠน์„ฑ

GDI+(System.Drawing) ๋Š๋ ค์„œ ๋ชป ์“ธ ์ •๋„์ธ๊ฐ€?
๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ ํ›„ ๋‚˜ ํ˜ผ์ž ๊ฒฐ๋ก ์„ ๋‚ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

GDI: 1ms
GDI+: 4~5ms
Direct2D: 7ms

์œˆ๋„์šฐ ์ปจํŠธ๋กค ๊ฐ™์€ ์ž‘์€ ์ด๋ฏธ์ง€์—์„œ ์“ธ ๊ฒฝ์šฐ GDI ๋ณด๋‹ค ๋Š๋ฆฌ์ง€๋งŒ ์•ˆํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ ๋ฐ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” GDI+ ์‚ฌ์šฉ์€ ์ค€์ˆ˜ํ•œ ์„ฑ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.
์ˆ˜์น˜ ์ƒ GDI ๋ณด๋‹ค 4~5๋ฐฐ ์ง€๋งŒ retained mode์—์„œ 10ms ๋‚ด์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
Direct2D๋Š” ID2D1DCRenderTarget Bind ๊ณผ์ •์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ณ ์š”

GDI+๋Š” ๋ฒค์น˜๋งˆํฌ์— ์ทจ์•ฝํ•˜๋‹ค.
ํฐ ์ด๋ฏธ์ง€, ๋“œ๋กœ์ž‰ ๊ฐ์ฒด๊ฐ€ ๋งŽ์€ ์ž‘์—…์—๋Š” ๋ถˆ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ชฝ์— ์ƒ๋‹นํžˆ ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€๋Š” ๊ฑธ๋กœ ์ถ”์ธกํ•ฉ๋‹ˆ๋‹ค.(๋ฉ”๋ชจ๋ฆฌ ์ปค๋ฐ‹, ํŽ˜์ด์ง€ํดํŠธ)

๊ฒฐ๋ก : ์•ฝ๊ฐ„ ๋Š๋ฆฌ์ง€๋งŒ ์ปค์Šคํ…€ ์ปจํŠธ๋กค ๋“ฑ ์ž‘์€ ์ด๋ฏธ์ง€์— ์“ฐ๋Š” ๊ฑด ์ข‹์€ ์„ ํƒ์ด๋‹ค.
๋ณต์žกํ•œ ์ฐจํŠธ๋‚˜ ํฐ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ Direct2D ๋˜๋Š” SkiaSharp ๊ถŒ์žฅ.

10๊ฐœ์˜ ์ข‹์•„์š”

์ด๊ฒŒ ์ „์— stackoverflow์—์„œ๋„ d2d๊ด€๋ จ ๋น„์Šทํ•œ ๊ฒฐ๋ก ์ด ๋‚ฌ๋˜๊ฑธ๋กœ ๊ธฐ์–ต์„ ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ d2d๋Š” ๊ฐ€๊ธ‰์  ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  d3d๋ฅผ ์จ๋ผ๋กœ์š”.
๋ฌผ๋ก  ๊ฝค๋‚˜ ์ „์— ๋ณธ๊ฑฐ๋ผ ์–ด๋””์„œ ๋ดค๋Š”์ง€๋Š” ๊ธฐ์–ต์ด ์•ˆ๋‚˜๋„ค์š”.

๋”๋ธ” ๋ฒ„ํผ๋ง ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด์„œ ์ˆ˜์ •ํ•˜๊ณ  ํ˜„์žฌ
GDI: 3ms
GDI+: 5ms
Direct2D: 3ms

์ผ๋‹จ D2D๋Š” ์„ฑ๋Šฅ, ํ’ˆ์งˆ ์šฐ์ˆ˜ํ•˜๊ณ  GDI+๋Š” ์•ฝ๊ฐ„ ๊ณ„๋ฅต์ด ๋˜๋Š” ๋“ฏ ํ•˜์ง€๋งŒ ๋‚˜์˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ
์ข€ ๋” ํ…Œ์ŠคํŠธ ํ•˜๊ณ  ์ตœ์ข… ๊ฒฐ๋ก ์„ ๋‚ด๊ฒ ์Šต๋‹ˆ๋‹ค.