2012-03-07 2 views
3

바이트 배열의 크기를 지속적으로 조정하면 성능에 큰 영향을 줄 수 있는지 궁금합니다. 클래스에 데이터를 추가하고 클래스에 이미 해당 데이터 유형이 포함되어있는 경우 기존 바이트 배열에 추가해야하므로 크기를 조정해야합니다. 문제는 거기에 여러 가지 데이터 크기가있을 수 있다는 것을 의미합니다. 즉, 여러 배열 크기가 발생할 수 있음을 의미합니다.어레이 성능 크기 조정?

성능에 큰 영향을 미칩니 까? 이 클래스는 매우 중요한 성능을 발휘합니다.

그렇다면 설계를 정밀 검사해야 할 수도 있습니다.

+1

프로파일 러를 사용하여 코드의 다른 부분에 비해 실행하는 데 많은 시간이 걸리는 지 확인해야합니다. VS에는 하나가 내장되어 있습니다. 거기에는 무료로 제공되는 것이 있거나 ANTS 또는 dotTrace와 같은 유료 버전이 있습니다. –

+0

빌드가 너무 느린 경우 프로파일 링하고 리팩터링하십시오. 가장 가능성이 가장 높을 것으로 예상되는 장소는 성능이 가장 중요한 장소가 될 것입니다. –

+0

@JayOtterbein 실제로 프로파일 러를 사용하는 데 방해가되지 않았습니다. 그래도 시작하자. – Alex

답변

8

크기 조정이 필요한 경우 대신 List<byte>을 사용해야합니다. 배열을 크기를 조정할 수 없으므로 완전히 새로운 배열을 만든 다음 추가 콘텐트를 추가하기 전에 이전 콘텐트를 복사해야합니다 (이것은 참조 대상인 경우 Array.Resize입니다).

List<T>은 내부적으로 배열을 사용하지만 크기 조정을 최적화하므로 처리 할 필요가 없습니다.

기본적으로 내부 배열이 꽉 차고 새로운 내용이 추가되면 List<T>은 내부 배열 크기를 두 배로 늘립니다. 따라서 실제로는 크기 조정이 거의 발생하지 않아야합니다. 배열을 직접 크기를 조정하면 비슷한 전략을 사용하고 "크기 카운터"를 유지하거나 콘텐츠 추가시 크기 조정 성능 비용을 사용합니다.

2

예 성능에 영향을줍니다. 크기 조정 배열은 단순히 원래 배열을 더 길게 또는 짧게 만들지는 않습니다. 새 배열을 만들고 필요할 경우 이전 배열을 새 배열로 복사합니다.

의견에서 제안한 것처럼 List 또는 ArrayList와 같은 동적 컨테이너를 사용하십시오. 반면 후자는 저장 유형이 아니지만 편리하게 사용할 수 있습니다. 다음을 살펴볼 수 있습니다. http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx

관련 문제