2011-03-30 5 views
3

이것은 .NET에 적용됩니다. 공간 매핑 응용 프로그램을 작성하려고합니다. 한 번에 여러 폴리곤이 메모리에 저장됩니다 (30 - 50 다각형 순서). 각 다각형에는 LatLong 점이 있습니다. 콜렉션은 다각형 당 10에서 200 사이의 범위를 가질 수 있습니다. 그러나 점을 사용하여 수행 할 계산이 많이 있습니다. 그 이유는 (성능을 위해) LatLong을 구조체로 만들고 싶습니다. 그러나 나는 메모리에있을 많은 LatLong에 피곤하다. 이것에 대한 통찰력은 인정 될 것입니다. 요점을 되풀이해서 : LatLong 구조체를 구조체로 만드는지 알고 싶습니다. 왜냐하면 성능을 ont, 또는 메모리에있을 latLongs 수 때문에 클래스를 수행하기를 원하기 때문입니다.구조체 대 클래스

+0

체크 아웃 : http://stackoverflow.com/questions/521298/when-to-use-struct-in-c 당신이 당신의 자신의 질문에 대답 할 수 있습니다. – Marc

+2

평소와 같이 가장 중요한 것은 value semantics *를 원할 경우 struct *로 지정해야합니다. 결정을 한 후에 (가치 또는 참조 의미를 원합니까?), 측정하십시오. 그런 다음 자신에게 물어보십시오. "이 성능이 충분히 좋은가요?" –

+0

이것은 절대적인 FAQ입니다. 추가 지침이 필요한 질문의 구체적인 세부 사항을 검색하거나 시도 범위를 좁히십시오. (추신 : 명확한 영어로도 도움이 될 것입니다.) – sehe

답변

10

이 답변은 리소스 우선 순위, 클래스/구조체의 내용 및 사용 방법에 따라 달라집니다. 여러분의 메모리/성능 리소스가 어떤 것인지 파악한 다음 두 가지 구현을 테스트하여 리소스 매개 변수에 어떻게 맞는지 확인하는 것이 좋습니다. 가능한 경우 수행 할 실제 작업을 테스트 해보십시오.

  • 를 그것은 논리적으로 원시 타입과 유사 하나의 값을 나타냅니다 유형은 다음과 특성을 모두 가지고 있지 않는

    이 구조를 정의하지 마십시오 : 문서에서

    MSDN also offers some good guidance on when and when not to use structs.

    (정수, 두 배 등)
  • 인스턴스 크기가 16 바이트보다 작습니다.
  • 변경할 수 없습니다.
  • 빈번하지 않아도됩니다.
1

하나 또는 둘 중 하나를 수행해야하는지 여부는 전적으로 애플리케이션에 따라 다릅니다. 나는 두 가지 방법 모두를 시도하고 어느 것이 더 빠르는지 보았습니다. 내가 그 질문을 할 때 내가하는 일이다.

0

이 대표 계산, 구조체와 하나의 클래스 하나, 그리고 측정 값이 테스트 구현을 확인, 나는 측정 (!) 성능을 반복합니다. 내 경험에 의하면, 예상되는 성능에 대한 편견은 그러한 상황에서 완전히 잘못된 것으로 드러날 가능성이 높습니다. 일반적으로

+0

동의하지만 실제 실제 계산을 사용하는 것이 훨씬 더 좋습니다. 동일한 성능 특성을 갖거나 가지지 않는 시스템의 성능을 측정 할 필요가 없습니다. 대표 계산이 무엇인지 결정하는 것이 항상 쉬운 것은 아닙니다. –

+0

나는 진짜 시스템을 사용하면 가장 좋은 결과를 얻을 것이라고 동의한다. 반면에 실제 시스템의 코드가 50.000 라인을 초과 할 경우 잘못된 시스템 결정은 시스템에 500 줄의 코드 만있는 것처럼 쉽게 수정되지 않습니다. –

1

, 당신은 데이터를 한 번 인스턴스화 변경되지 않습니다 그들에 포함 된 간단한 개체의 큰 컬렉션을 (그들은 기본적으로 데이터 컨테이너를 것처럼 latLongs 소리)를 가질려고하는 경우에 개인적으로 변경할 수없는 구조체를 사용합니다.