본문 바로가기

C#

(4)
박싱 언박싱 성능 체크 기록 최적화 관련 자료들을 찾다보면 박싱 언박싱 얘기가 나오는데 어느정도로 느린건지 감이 오질 않아서 비교하고 기록을 남겨봅니다 더하기는 10,000,000번 (천만번)씩 반복했고 디버그 Debug.LogError() 코드는 비교용으로 1000번 반복했습니다. 결론 차이가 나기는 하지만 벌벌떨면서 사용하지 않을 필요는 없어보인다 전체 코드 public class TimeTester : MonoBehaviour { void Start() { int repeat = 10000000; CheckTime(() => { int sum = 0; for (int i = 0; i { object num = 1; i..
[C#] Generic 함수 타입 변수로 지정하기 제네릭 함수에 타입을 동적으로 제어하고싶을 때가 있어서 정리해보았습니다. Skill이 있다. public abstract class Skill { } public class Nothing : Skill { } public class Fire : Skill { } public class Arrow : Skill { } Player가 있다. Player는 스킬을 가지고있고, HasSkill 함수가 있다. public class Player { public List skills = new List(); public bool HasSkill() { return skills.Any(t => t is T); } } 데이터에 따라 해당 스킬을 가지고 있는지 판별하고 싶을 때 리플렉션으로 함수를 가져와서 사용할 수 있..
[C#] 스택(Stack), 큐(Queue) 속도 차이 실험 배경 캐시메모리 지역성 때문에 스택이 큐보다 push, pop 하는데 속도가 더 빠르다 해서 실험을 해보았는데 데이터 push만 하는 경우에도 스택이 더 빨라서 그 이유를 찾아보았습니다. 실험 환경 Windows 10 유니티, C# 결과 결론부터 말하자만 스택이 더 빠르다. C#에서 스택은 배열, 큐는 순환배열로 이루어져 있어 조건검사 하는데 좀 더 많은 연산을 하는 것 같다. 실험코드, 참고 사이트는 아래에 적겠습니다. 테스트 Stack 실험 코드 더보기 실험 코드 using System; using System.Collections.Generic; using UnityEngine; public class TimeTester : MonoBehaviour { private Queue queue = ..
[C#] 캐시 지역성 테스트 캐시 지역성 최근에 사용했던 데이터와 인접한 데이터가 참조될 가능성이 높다는 특성으로 캐시가 효율적으로 동작하기 위해 사용되는 성질이다. 실험 환경 Windows 10 C# 유니티 실험방법 2중 for문을 돌려 인덱스 접근을 다르게 한다. 하나는 i, j / 하나는 j, i로 접근 i, j 반복 실험코드 using System; using System.Collections.Generic; using UnityEngine; public class TimeTester : MonoBehaviour { void Start() { int repeat = 5000; CheckTime(() => { int[,] arr = new int[repeat, repeat]; for (int i = 0; i < repeat; ..