이것은 .NET에 적용됩니다. 공간 매핑 응용 프로그램을 작성하려고합니다. 한 번에 여러 폴리곤이 메모리에 저장됩니다 (30 - 50 다각형 순서). 각 다각형에는 LatLong 점이 있습니다. 콜렉션은 다각형 당 10에서 200 사이의 범위를 가질 수 있습니다. 그러나 점을 사용하여 수행 할 계산이 많이 있습니다. 그 이유는 (성능을 위해) LatLong을 구조체로 만들고 싶습니다. 그러나 나는 메모리에있을 많은 LatLong에 피곤하다. 이것에 대한 통찰력은 인정 될 것입니다. 요점을 되풀이해서 : LatLong 구조체를 구조체로 만드는지 알고 싶습니다. 왜냐하면 성능을 ont, 또는 메모리에있을 latLongs 수 때문에 클래스를 수행하기를 원하기 때문입니다.구조체 대 클래스
답변
이 답변은 리소스 우선 순위, 클래스/구조체의 내용 및 사용 방법에 따라 달라집니다. 여러분의 메모리/성능 리소스가 어떤 것인지 파악한 다음 두 가지 구현을 테스트하여 리소스 매개 변수에 어떻게 맞는지 확인하는 것이 좋습니다. 가능한 경우 수행 할 실제 작업을 테스트 해보십시오.
- 를 그것은 논리적으로 원시 타입과 유사 하나의 값을 나타냅니다 유형은 다음과 특성을 모두 가지고 있지 않는
이 구조를 정의하지 마십시오 : 문서에서
MSDN also offers some good guidance on when and when not to use structs.
(정수, 두 배 등) - 인스턴스 크기가 16 바이트보다 작습니다.
- 변경할 수 없습니다.
- 빈번하지 않아도됩니다.
하나 또는 둘 중 하나를 수행해야하는지 여부는 전적으로 애플리케이션에 따라 다릅니다. 나는 두 가지 방법 모두를 시도하고 어느 것이 더 빠르는지 보았습니다. 내가 그 질문을 할 때 내가하는 일이다.
이 대표 계산, 구조체와 하나의 클래스 하나, 그리고 측정 값이 테스트 구현을 확인, 나는 측정 (!) 성능을 반복합니다. 내 경험에 의하면, 예상되는 성능에 대한 편견은 그러한 상황에서 완전히 잘못된 것으로 드러날 가능성이 높습니다. 일반적으로
동의하지만 실제 실제 계산을 사용하는 것이 훨씬 더 좋습니다. 동일한 성능 특성을 갖거나 가지지 않는 시스템의 성능을 측정 할 필요가 없습니다. 대표 계산이 무엇인지 결정하는 것이 항상 쉬운 것은 아닙니다. –
나는 진짜 시스템을 사용하면 가장 좋은 결과를 얻을 것이라고 동의한다. 반면에 실제 시스템의 코드가 50.000 라인을 초과 할 경우 잘못된 시스템 결정은 시스템에 500 줄의 코드 만있는 것처럼 쉽게 수정되지 않습니다. –
, 당신은 데이터를 한 번 인스턴스화 변경되지 않습니다 그들에 포함 된 간단한 개체의 큰 컬렉션을 (그들은 기본적으로 데이터 컨테이너를 것처럼 latLongs 소리)를 가질려고하는 경우에 개인적으로 변경할 수없는 구조체를 사용합니다.
- 1. 구조체 대 클래스 개체의 배열을 만드는 기본 초기화
- 2. 구조체 및 팩토리 클래스
- 3. 템플릿 구조체 클래스 유형으로
- 4. 구조체 중첩 및 클래스
- 5. 타사 클래스/구조체 정의
- 6. C++/CLI 구조체/클래스 정렬
- 7. Perl : 형식 제약없이 클래스 :: 구조체
- 8. 구조체/클래스 멤버의 명시적인 초기화
- 9. 디스크에 구조체 및 클래스 작성
- 10. 목표 C 클래스 또는 구조체?
- 11. 성능 - NSValue 대 컨테이너 객체의 구조체
- 12. OpenMP 대 C++ 0x parallilzation 구조체
- 13. 클래스 클래스 - 인스턴스 대 클래스 메서드
- 14. PHP 클래스 : :: 대 -> -?
- 15. NodeJS 모듈 대 클래스
- 16. VB에서 클래스 대 모듈
- 17. CSS ID 대 클래스
- 18. Nullable struct 대 클래스
- 19. 클래스 대 인터페이스
- 20. 프로토 타입 대 클래스
- 21. 인터페이스 대 콘크리트 클래스
- 22. FormatProvider 대 확장 메서드 대 새로운 클래스
- 23. .NET의 래퍼 유형 : 구조체 또는 클래스?
- 24. 구조체 클래스 라이브러리/dll의 부트 스트랩
- 25. 클래스 (Python)와 구조체 (C)의 차이점
- 26. C++ 클래스/구조체 멤버의 기본 표시
- 27. C#에서 런타임 코드 (구조체, 클래스) 생성
- 28. 예상 클래스, 델리게이트, enum, 인터페이스 또는 구조체
- 29. 구조체 튜토리얼을 사용하는 Objective-C 커스텀 클래스
- 30. g ++의 덤프 클래스/구조체 멤버 변수
체크 아웃 : http://stackoverflow.com/questions/521298/when-to-use-struct-in-c 당신이 당신의 자신의 질문에 대답 할 수 있습니다. – Marc
평소와 같이 가장 중요한 것은 value semantics *를 원할 경우 struct *로 지정해야합니다. 결정을 한 후에 (가치 또는 참조 의미를 원합니까?), 측정하십시오. 그런 다음 자신에게 물어보십시오. "이 성능이 충분히 좋은가요?" –
이것은 절대적인 FAQ입니다. 추가 지침이 필요한 질문의 구체적인 세부 사항을 검색하거나 시도 범위를 좁히십시오. (추신 : 명확한 영어로도 도움이 될 것입니다.) – sehe