728x90
오늘 학습한 내용
1) 코루틴 new 키워드 사용 줄이기
- yield return new WaitForSeconds(1f);를 반복적으로 호출하면 매번 새로운 객체를 생성하여 GC(가비지 컬렉션) 부담이 증가
- WaitForSeconds 객체를 미리 선언하고 재사용하는 방식으로 최적화 가능
2) 연산 순서 고려하기
- 벡터 연산과 스칼라 연산을 혼합할 때 연산 순서가 성능에 영향을 줄 수 있음
- speed * Time.deltaTime * dir 방식이 dir * speed * Time.deltaTime보다 연산 효율이 높음
- 스칼라 연산을 먼저 수행하고 벡터 연산을 나중에 실행하는 것이 성능에 유리함
문제 및 해결 과정
1) 문제 (코루틴을 사용할때 성능 저하 문제)
- yield return new WaitForSeconds(1f); 방식으로 코루틴을 실행하면 매번 새로운 객체가 생성됨
- GC(가비지 컬렉션) 부담이 증가하여 불필요한 메모리 할당과 해제가 반복적으로 발생
시도한 해결 방법
new (WaitForSeconds)객체를 미리 선언하여 반복적으로 재사용하는 방식으로 변경
private WaitForSeconds waitForOneSecond = new WaitForSeconds(1f);
IEnumerator SomeCoroutine() {
while (true) {
Debug.Log("코루틴 실행 중...");
yield return waitForOneSecond; // 캐싱한 객체 재사용
}
}
결과
- GC 할당이 줄어들고 성능이 향상됨
- 불필요한 객체 생성을 방지하여 메모리 사용을 최적화할 수 있었음
2) 문제 (연산 순서에 따른 성능 차이)
- 연산 순서에 따라 불필요한 벡터 연산이 추가로 발생
- dir * speed * Time.deltaTime 방식은 벡터 연산이 먼저 수행되어 성능이 저하될 가능성이 있음
시도한 해결 방법
아래 두 개의 코드 비교
// 방법 1
transform.position += dir * speed * Time.deltaTime;
// 방법 2
transform.position += speed * Time.deltaTime * dir;
- dir * speed * Time.deltaTime → 벡터 연산이 먼저 수행됨
- speed * Time.deltaTime * dir → speed * Time.deltaTime는 스칼라 연산이므로 더 빠름
- 연산 비용을 줄이기 위해 스칼라 연산을 먼저 수행하고 벡터 연산을 나중에 실행하는 것이 바람직함
결과
불필요한 연산을 줄여서 성능을 개선할 수 있었음
새롭게 알게 된 점
- 코루틴에서 new(예.WaitForSeconds)를 캐싱하여 불필요한 객체 생성을 방지하는 것이 최적화에 효과적
- 연산 순서를 최적화하면 불필요한 계산을 줄이고 성능을 향상시킬 수 있음
- 최적화는 무조건 적용하는 것이 아니라, 프로젝트 상황에 맞게 신중하게 결정해야 함
728x90
'내일배움캠프' 카테고리의 다른 글
내일배움캠프 Unity - TIL : 25.03.27 (0) | 2025.03.27 |
---|---|
내일배움캠프 Unity - TIL : 25.03.26 (0) | 2025.03.26 |
내일배움캠프 Unity - TIL : 25.03.19 (0) | 2025.03.19 |
내일배움캠프 Unity - TIL : 25.03.18 (0) | 2025.03.18 |
내일배움캠프 Unity - TIL : 25.03.14 (2) | 2025.03.14 |