좋아, 당신이 링크 한 그 란트에 구멍을 뚫기 만하면됩니다.
- "C #은"Just In Time "인터프리터에 의존합니다." -JIT 컴파일러 입니다. 메소드가 JITted 후 한 번 컴파일 된 코드는 각 호출에 재사용됩니다. 컴파일 된 코드는 사전 컴파일 된 기본 코드와 매우 비슷합니다.
- "Xenon CPU는"제자리에있는 "프로세서입니다 -"순서대로 "를 의미합니까? - "Xenon CPU에는 분기 예측이 없습니다" . 그는 JIT 컴파일이 자연스럽게 CPU에 의해 재정렬되어야하는 잘못된 코드를 생성하고 많은 분기를 일으킨다는 것을 의미합니다. 절대 말도 . 이 CPU 아키텍처에서 실행하는 것과 동일한 성능 조언이 C ++ 및 C # 모두에 적용됩니다.
- "[JIT]은 360에서 일정한 플러싱이 필요합니다" – 잘못 컴파일 된 코드는 정상적으로 컴파일 된 코드와 같이 캐시에 보관 될 수 있습니다. 파이프 라인 플러시를 의미하는 경우 위의 요점을 참조하십시오.
- "제네릭 [...] 사용 코드 생성" -제네릭은 다른 모든 것과 마찬가지로 JITted이며 다른 모든 것과 마찬가지로 JITted 코드는 빠릅니다. 제네릭을 사용하면 성능이 저하되지 않습니다.
- "언어의 모든 섹시한 비트 [...]는 분기 예측을 필요로합니다 ..." -이것이 C ++에도 어떻게 적용되지 않습니까? - "... 또는 [...] 내부 코드 생성" -JITting을 의미합니까? 내가 빠르다고 언급 했습니까? ( 데스크톱 CLR이 실제로 사용 하는 모든 장소에 들어가지는 않습니다. 코드 생성을 않습니다. Xbox 360에서 지원하지 않는 기능입니다!)
- "[C #에는 [C ++]의 방대한 라이브러리가 없습니다" " -XNA 자체를 제외하고? 그리고 훨씬 더 . (여전히 이것은 다소 공정한 포인트입니다.)
Xbox 360의 XNA는 .NET Compact Framework CLR의 수정 된 버전에서 실행됩니다. 의심의 여지없이 데스크탑 버전의 표준에 맞지 않습니다. JITter는 아마 좋지 는 않지만 나쁘지 않다고 생각 합니다. 나는 그가 두려운 가비지 수집기 를 언급하지 않은 것에 놀랐습니다. 데스크톱 CLR에 비해합니다.
(물론-당신은 어쨌든 할당에주의를 기울여야하는 것처럼 전문적으로 개발 된 게임에서 가비지 수집기를 치지 않아야 합니다. 전문가 수준의 게임.)
.NET Compact Framework에 대한 실제 기술 토론은 개요 , JIT 컴파일러 및 GC 및 힙 시리즈로 시작하십시오. .
그의 용어에 대해 완전히 구체적이지 않은 방식은 그가 의미하는 바를 이해하기 어렵게 만듭니다. 그는 최대 허용 모드에 있거나 자신이 무엇을 말하는지 모릅니다.
이제 우리는 비켜 것을 가지고 그 다음은 몇 가지 것들 않는 360에 XNA를 사용하기보다는 기본 이동하여 놓치지을 :
- 실제로 매우 빠른 CPU 부동 소수점 연산 을 수행하기 위해 SIMD / Vector 장치에 액세스
- C #보다 약간 빠른 모국어 코드 사용 기능
- 조금 능력 당신은 메모리 할당 방법에 비트 lazier
- XBLIG 게임은 6 개의 코어 중 4 개에만 액세스 할 수 있습니다 (그러나 여전히 3 개의 CPU를 모두 얻지 만 풀 코어가 아니므로 많이 놓치지 않습니다)-이것이 XBLIG가 아닌 XNA에 적용되는지 확실하지 않음 계략
- 매우 모호한 그래픽 속임수를위한 완전한 DirectX 액세스
이것들은 단지 CPU 측 제한 사항이라는 것을 지적 할 가치가 있습니다. 여전히 GPU에서 완전히 무료로 액세스 할 수 있습니다.
나는 이 질문과 효과적으로 동일한 질문에 대한 이 답변 에서 이러한 것들을 설명했습니다 . 그 답변에서 언급했듯이 XNA는 "전문"개발에 절대적으로 적합합니다. .
피해야 할 유일한 이유는 C # 재능을 고용하고 C # 엔진을 라이센스하며 기존 C # 지식과 동일한 방식으로 기존 C # 코드를 재사용 할 수 없기 때문입니다. 또는 C #을 지원하지 않는 플랫폼을 대상으로 할 수도 있습니다.
물론 "전문적인"개발자가 아닌 많은 사람들에게 XNA는 Xbox 360을 이용할 수있는 유일한 옵션입니다.
다른 질문에 대답하려면 :
C #에서 아무것도 당신이 기본적으로 데이터 중심의 접근 방식을 사용하여 멈추지 정확히 같은 방식으로 당신이 C에서 사용할 것 ++.
C #에는 컴파일 타임에 코드를 자동으로 인라인하는 기능이 없으며 (확인하지 않고) 소형 CLR의 JITter가 메소드를 인라인 할 수 없다고 확신합니다 (데스크탑 CLR 가능). 따라서 성능이 중요한 코드의 경우 C ++에서 일부 지원을 제공하는 C #에서 수동으로 인라인해야 할 수도 있습니다.
C #에서 충돌 감지 및 유체 시뮬레이션과 같은 CPU 수학 집약적 인 항목을 자주 볼 수없는 더 큰 이유는 위에서 언급 한 바와 같이 벡터 장치에 대한 액세스 권한이 없기 때문입니다.