저는 C++과 C#의 속도 차이가 JIT 컴파일러에 의해 받아 들여지는 바이트 코드로 컴파일되는 것에 대해 생각하고있었습니다 (정확합니까?). C#은 모든 검사를 수행합니다.작은 집약적 인 작업을 위해 C#의 성능을 어느 정도로 얻을 수 있습니까?
나는이 옵션을 컴파일 옵션에서 모두 해제 할 수 있으며, 안전하지 않은 코드는 공용 언어 런타임에서 확인할 수 없기 때문에 unsafe
키워드를 사용하는 것이 가능하다는 것을 알고 있습니다.
따라서 간단한 콘솔 응용 프로그램을 두 언어로 작성하면 상상의 동전을 무한 횟수 뒤집어서 10,000 회 정도의 반복 결과를 화면에 표시합니다. 속도 차이는 얼마나 될까요? 이것은 매우 간단한 프로그램이기 때문에 이것을 선택했습니다.
이걸 테스트하고 싶지만 C++을 모르거나 컴파일 할 수있는 도구가 있습니다. 이것은 비록 내 C# 버전입니다 :
static void Main(string[] args)
{
unsafe
{
Random rnd = new Random();
int heads = 0, tails = 0;
while (true)
{
if (rnd.NextDouble() > 0.5)
heads++;
else
tails++;
if ((heads + tails) % 1000000 == 0)
Console.WriteLine("Heads: {0} Tails: {1}", heads, tails);
}
}
}
충분히 의도적으로 보증 "안전하지 않은"또는 오버 플로우와 같은 컴파일 옵션 중 일부가없는 DLL을에 코드 섹션을 컴파일 할 수있는 차이가 사용할 수 확인? 또는 다른 방법으로 C++에서 섹션을 컴파일하는 것이 유익 할 것입니까? 나는 interop 속도가 그때에도 작용할 것이라 확신합니다.
- 합니까 C#을 안전하지 않은 코드를 사용에서 성능 향상이있다 :
주체성을 방지하기 위해, I는이 질문의 특정 부분을 반복?
- 오버플로 검사를 비활성화하는 것과 같은 컴파일 옵션이 성능을 향상시키고 안전하지 않은 코드에 영향을 줍니까?
- 위의 프로그램이 C++에서 더 빠르거나 무시할 수있을 정도로 다를까요?
- C++와 같은 언어로 긴 집약적 인 업무 처리를 컴파일하거나 보너스로/unsafe를 사용하는 것이 가치가 있습니까? 덜 주관적으로, 이렇게하면 집중적 인 작업을 더 빨리 완료 할 수 있습니까?
이 아주 나쁜 예 - 당신은 난수 생성기의 성능을 테스트하고 Console.WriteLine. – Marek
최대 성능을 얻기위한 ** 유일한 ** 방법은 ** 좋은 ** 코드를 작성하는 것입니다. 당신이 C# 또는 C++로 쓰든 상관 없습니다. 어떤 언어도 "아, 그리고이 코드를 X보다 더 효율적으로 컴파일하는 것은 금지되어 있습니다"라는 규칙으로 정의되어 있지 않습니다. C# 및 C++ 컴파일러는 가능한 빨리 코드를 만들 수있는 모든 작업을 수행합니다 *. 그러나 예, 많은 일반적인 경우 C#은 C++만큼 빠르다. 때로는 더 빠른 코드가 될 수도 있습니다. 때로는 그렇지 않습니다. 언어에 대한 걱정이 적어지고 작성중인 코드에 대해 더 많이 알 수 있습니다. – jalf
@ jalf : C# 응용 프로그램 대 C++ 응용 프로그램의 실행 속도가 더 빠르다는 예가 있습니까? C#이 C++만큼 빠르거나 C++보다 빠르다고 보는 방법은 간단한 데이터 형식 만 사용하는 것입니다 ... – Alerty