๋ฌธ์ ์ ์ญ์ ํ๊ฒ ์ต๋๋ค!
[3๊ฐ์ง ์ต์ ํ ๋ฐฉ๋ฒ - ์ฌ๋ก 5๊ฐ์ง]
1. CPU ๋น์ฉ ์ต์ ํ: UGUI.Rendering.UpdateBatches() ๋ฌธ์ ์ฌ๋ก, GC Allocation์ ์ํ ํ์นญ ๋ฌธ์ ์ฌ๋ก
2. GPU ๋น์ฉ ์ต์ ํ: ์๋ํ์ง ์์ ์ ์ ํ๋ฉด ๋ ๋๋ง ๋น์ฉ ๋ฌธ์ ์ฌ๋ก
3. ๋ฉ๋ชจ๋ฆฌ&์์ ๋น์ฉ ์ต์ ํ: ์์ ๋ฒ๋ค ์ค๋ณต ์์ ๋ฌธ์ ์ฌ๋ก, GC Allocation์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ์ฌ๋ก
[ํ๋จ ๋ด์ฉ ์์ฝ๋ณธ]
1. CPU ๋น์ฉ ์ต์ ํ: UGUI.Rendering.UpdateBatches() ๋ฌธ์ ์ฌ๋ก, GC Allocation์ ์ํ ํ์นญ ๋ฌธ์ ์ฌ๋ก
1) UpdateBatches๊ฐ ๋ฌธ์ ๊ฐ ๋๊ณ ํด๊ฒฐํ๋ ์ฌ๋ก
: ํ๋กํ์ผ๋ง์ผ๋ก ๋ฒํผ์ด ์์ง์ฌ์ ๋น์ฉ์ด ๋ฐ์ํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋๋ฉด. ๋ฒํผ์ ๋ณ๋์ Canvas๋ก ์ฎ๊ธฐ๋งํด๋ ๋ฐฐ์น์๋ฅผ ์ค์ผ ์ ์์. ์ฆ, ๋์ ์ธ UI ์์๋ฅผ ๋ณ๋์ ์บ๋ฒ์ค๋ก ๋๋ ๋ผ.
2) GC allocation์ด ๋ฐ์๋์ด ๋ฌธ์ ๊ฐ ๋๋ ์ฌ๋ก
ํ๋กํ์ผ๋ง์ผ๋ก ๊ฐ์๊ธฐ ๋น์ฉ์ด ์ปค์ง๋ ์์น๋ฅผ ์ฐพ์.
GC.Collect ํธ์ถ(๊ฐ๋น์ง์ฝ๋ ํฐ ๋ฐ์) ๋๋ฌธ์ ํ๋ ์์ด ๋จ์ด์ก์์ ํ์ธ. GC.Alloc์ด ์ง์์ ์ผ๋ก ์ผ์ด๋๋ ์ํฉ์ ์ ๊ฑฐํด์ผ ํจ.
๊ฐ๋น์ง ์ฝ๋ ํฐ ๋ฐ์์ ํ๋ ์์ด ๋จ์ด์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด Incremental GC ๋ฅผ ์ผ๋ ๊ฒ๋ ๋์๋จ.
GC Allocation ์ฐพ๋ ๋ฒ: ์ ์ ๋ถ์๋๊ตฌ Project Audiotor๋ฅผ ํตํด์๋ ์ฝ๊ฒ ์ฐพ์ ์ ์์.
Analyze ๋ฒํผ ํด๋ฆญ. Code > diagnoise.
3) ์ ์ฌํ๊ฒ GC.Collect ํธ์ถ์ด ๋ฐ์ํ๊ณ ์ค์ผ ์ ์๋ ์ฌ๋ก.
๋น์ฉ์ด ๋ง์ด ๋ฐ์ํ๋ ์ ๋ฐ์ดํธ ์ฝ๋์์๋ LINQ ๊ฐ์๊ฑฐ ์ฌ์ฉํ๋ฉด ์๋จ. ๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์.
2. GPU ๋น์ฉ ์ต์ ํ
1) ์๋ํ์ง ์์ ์ ์ ํ๋ฉด ๋ ๋๋ง ๋น์ฉ ๋ฌธ์ ์ฌ๋ก
3๊ฐ ๋ํ์ ๋ ๋๋ง ๋น์ฉ์ด ๋ค ๋ฌ๋์. ์ด๊ฑธ ์ด๋ป๊ฒ ์ฐพ์๋๋์ง ์์๋ณด์.
๋ ๋๋ง ๋น์ฉ ์ฐพ๋ ๋ฒ: XCode Frame Debugger์์ ํ๋กํ์ผ๋ง์ ํด๋ณด์.
์ ํ๋ฉด์์ CPU, Disk ๋ฑ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๊ณ , ์๋ ํ๋ฉด์์ GPU ๋น์ฉ์ ํ์ธํ ์ ์์.
์ฆ, ์๋ ํ๋ฉด์์ ์ฐ๋ชจ์ ์์ด์ฝ ํด๋ฆญ > Capture ๋ฒํผ ํด๋ฆญ > ๋ ๋๋ง ๋น์ฉ์์ผ๋ก ๋ชฉ๋ก์ด ์ญ ๋์ด.
์ํ์ 123.17 ๋ง์ดํฌ๋ก์ด / ๋์์ ํ์ ๋ค๋ชจ๋ 774.54 ๋ง์ดํฌ๋ก์ด
๋ฌด์จ ์ฐจ์ด๊ฐ ์์๋? ์ด๋ฏธ์ง ์์ญ ์ฐจ์ด๊ฐ ์์์.
์์ฒ๋ผ ํ์ํ ์์ญ๋ง ๋ ๋๋งํด์ผ ํจ.
์ ์ ๋ฆฌ์๋ฃ ์ฐธ๊ณ .
3. ๋ฉ๋ชจ๋ฆฌ&์์ ๋น์ฉ ์ต์ ํ: ์์ ๋ฒ๋ค ์ค๋ณต ์์ ๋ฌธ์ ์ฌ๋ก, GC Allocation์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ์ฌ๋ก
1) ์์ ๋ฒ๋ค์ ํ์ผ์ด ์ค๋ณตํด์ ๋ค์ด๊ฐ๋ ๋ฌธ์ ์ฌ๋ก
์ฌ์ 5๊ฐ์ ํ ์คํธ๋ฅผ ๋ฐฐ์นํจ.
๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ฌ๋ก ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ํ์ธํ ์ ์์
* ์ ๋ํฐ ํ๋กํ์ผ๋ฌ ์คํ > ๋ฉ๋ชจ๋ฆฌํญํด๋ฆญ > Open Memory Profiler ํด๋ฆญ > ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ์บก์ฒ๋ฒํผ ํด๋ฆญ > ์ค๋ ์ท ํด๋ฆญ
cf) ๋ ๋ ํ ์ค์ฒ๊ฐ ์ฌ์ด์ฆ๊ฐ ๊ฐ์ฅ ํผ.
์ด๋ฆ์ด ๋์ผํ๊ณ ์ฉ๋์ด ๊ฐ๋ค๋ฉด ์ค๋ณต์ผ ํ๋ฅ ์ด ๋๊ฒ์ง. ์์ฌ์์ฌ.
์์ ๋ฒ๋ค์์ ์ฉ๋ ํ์ธ.
์ด๋ค ์์ ์ด ๋ฌธ์ ๊ฐ ์๋์ง๋ Asset Bundle Browser์์ ํ์ธ ๊ฐ๋ฅ. ๊ฒฝ๊ณ ๋ฝฑ.
๊ณตํต๋๋ ํด๋นํฐํธ๋ฅผ ๋ฐ๋ก ์์ ๋ฒ๋ค๋ก ๋ฌถ์ด์ฃผ๊ณ ์๋ก ๋น๋๋ฅผ ํ๋ฉด ์ฉ๋์ ์ค์ผ ์ ์์. ๋ชจ๋ 10KB๋ก ์ค์ด๋ ๊ฑธ ํ์ธํ ์ ์์.
์ ๋ฆฌ์ ๋ฆฌ
2) GC Allocation์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ์ฌ๋ก
: ๋ฉ๋ชจ๋ฆฌ ์ถ์ ํ๋ ๋ฒ์ ์์๋ณด์.
์ฉ๋์ด ํฐ ์คํธ๋ฆฌ๋ฐ์ ๊ณ์ ์์ฑ / ์ญ์ ํ๋ ์ฝ๋.
๋ฉ๋ชจ๋ฆฌ ๋น์ฉ ๊ฒฐ๊ณผ.
GC Allocation์ ๋ด๋ณด๋ฉด ์ด๋ค ํจ์์์ ๋ฌด์์ด ํ ๋น๋์๋์ง ๋ณด์. ์กฐ์ฌ์กฐ์ฌ.
๋ ธ๋์์ญ Empty Rfagmented Heap Space ๊ฐ ๊ณ์ ์ฆ๊ฐํจ.
์ฝ๋ ์งค ๋, Memory Frofiler๋ก ์๋ฐ ์์ญ์ด ์์๊ธฐ๋์ง ๊ณ์ ํ์ธํ ํ์๊ฐ ์์. ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ ํ์ธ.
์ด๋์ ํ ๋นํ๋์ง ๊ถ๊ธํ๋ฉด Object and Allocations์์ ํํฐ๋ง์ ํตํด ์์ฌ ๊ฐ๋ ๊ฒ์ ์ถ์ ํ ์ ์์.
์คํ์์ค ๋๊ตฌ ์ค์, Heap Explorer๋ก๋ ํ์ธํ ์ ์์.
์ ์ ์ธ ์ฝ๋์์๋ Project Auditor์ Analyze๋ฅผ ํตํด์๋ ํ์ธ ๊ฐ๋ฅ. ์์ฃผ ์ ๋ฐ์ดํธ ๋๋ ๊ณณ์์ ์ฌ์ฉํ์ง ๋ง๋ผ ๊ฒฝ๊ณ ํ์ธ.
[์ ๋ฆฌ]
[Q&A]
Q. ์ ios๋ก ๋น๋ํด์ ํ๋กํ์ผ๋ฌ๋ฅผ ๋ถ์๋์ง ?
: ํด๋น๋๋ OS์ ํ๋กํ์ผ๋ฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ ์ข์.