2012-07-17 3 views
1

더 빠르고 더 적은 메모리를 사용합니다 - 속성 집합을 가진 개체 배열이나 배열의 모든 개체 속성을 가진 배열?개체의 배열 대 개체의 속성의 배열 - 어느 쪽이 더 효율적입니까?

저는 2 차원 타일 게임을 만들고 있는데 세계는 타일로 이루어져 있습니다. 그래서 각 타일에 대해 Tile 클래스의 인스턴스를 만들고 타일 속성 대신 타일 배열을 사용하는 것이 더 빠르다고 말하는 사람들이 있습니다. 나는 내 눈과의 차이점을보고 싶지만이 시점에서 게임을 복잡하게 작성하여 코드를 다시 작성하십시오.

업데이트

: 나는 두 옵션을 테스트하는 시간을 발견하고, 사소한 메모리 및 CPU 차이, 객체의 배열 (코드 가독성 + 디버깅 단순)와 함께 작동하도록 너무 쉽게 것에 대해 승리.

답변

3

아마도 배열 생성 및 액세스 패턴에 따라 달라집니다. 일반적으로 엄밀히 말하자면 두 가지 접근 방식이 성능 차이가 큰 것으로 기대하지는 않습니다. 정말로 그것이 성능 문제 일 수 있다고 생각한다면 확신 할 수있는 유일한 방법은 둘 다 구현하고, 프로그램을 프로파일 링하고, 결과를 비교하는 것입니다.

배열이 Tile 인 것은 훨씬 간단하고 직선적 인 코드 일 가능성이 높습니다. 실제 성능 문제가있는 경우 코드를 사용하여 값 비싼 코드 섹션을 찾으십시오.

+0

간단하고 읽기 쉬운 코드가 일정 시간 성능 변경 (있는 경우)보다 낫다고 말할 수 있습니다. – edthethird

2

메모리 사용 관점에서 볼 때 속성 배열은 메모리를 적게 소비합니다. 실용적인 관점에서 볼 때 객체 배열을 사용하면 디버깅을 쉽게 해주는 추상화 계층이 추가되고 코드를 쉽게 수정하여 새 속성을 추가 할 수 있습니다.

+0

모든 타일 객체가 이미 있고 다른 객체에 의해 참조 된 경우 새 객체 배열을 만들고 동일한 타일을 참조하면 "속성 배열"보다 "메모리를 더 많이 차지하지 않습니다". 이것은 원래 포스터가'타일'이'클래스'(struct와 반대)라고 설명했기 때문입니다. 따라서 새 배열에는 동일한 이전 인스턴스에 대한 _references_ 만 포함됩니다 ('class'는 참조 유형을 의미 함). 이러한 상황에서 참조 배열은 거의 "여분의"메모리 (이미 존재하는 타일 객체)를 소비하지 않습니다. –

관련 문제