programing

C # / F # 성능 비교

copyandpastes 2021. 1. 14. 23:38
반응형

C # / F # 성능 비교


새로운 F # 언어의 적절한 사용을 보여주기 위해 웹에서 사용할 수있는 C # / F # 성능 비교가 있습니까?


자연 F # 코드 (예 : 기능 / 불변)는 자연 (명령 / 변경 가능 개체 지향) C # 코드보다 느립니다. 그러나 이러한 종류의 F #은 일반적인 C # 코드보다 훨씬 짧습니다. 분명히 트레이드 오프가 있습니다.

반면 대부분의 경우 C # 코드의 성능과 동일한 F # 코드의 성능을 얻을 수 있습니다. 일반적으로 명령형 또는 변경 가능한 객체 지향 스타일로 코딩하고 병목 현상을 제거해야합니다. C #에서 사용하는 것과 동일한 도구 (예 : .Net 리플렉터 및 프로파일 러)를 사용합니다.

즉, 성능을 저하시키는 F #의 일부 고 생산성 구조를 인식하는 것이 좋습니다. 내 경험상 다음과 같은 경우를 보았습니다.

  • 참조 (대 클래스 인스턴스 변수), 수십억 번 실행 된 코드에서만

  • F # 비교 (<=) 대 System.Collections.Generic.Comparer (예 : 이진 검색 또는 정렬)

  • 테일 호출-컴파일러 또는 .Net 런타임으로 최적화 할 수없는 특정 경우에만. 주석에서 언급했듯이 .Net 런타임에 따라 다릅니다.

  • F # 시퀀스는 LINQ보다 두 배 느립니다. 이는 참조 및 F # 라이브러리의 함수를 사용하여 seq <_>의 번역을 구현하기 때문입니다. 이것은 Linq, PLinq 또는 DryadLinq를 사용하는 동일한 서명으로 Seq 모듈을 교체 할 수 있으므로 쉽게 수정할 수 있습니다.

  • 튜플, F # 튜플은 힙에 정렬 ​​된 클래스입니다. 어떤 경우에는, 예를 들어 int * int 튜플은 구조체를 사용하는 데 지불 할 수 있습니다.

  • 할당, 클로저는 액세스 된 변수를 기억하는 new 연산자로 생성 된 클래스라는 것을 기억할 가치가 있습니다. 클로저를 "리프트"하거나 액세스 된 변수를 인수로 명시 적으로 취하는 함수로 대체 할 가치가 있습니다.

  • 특히 일반 코드의 경우 인라인을 사용하여 성능을 향상 시키십시오.

내 경험은 먼저 F #으로 코딩하고 중요한 부분 만 최적화하는 것입니다. 특정 경우에는 F #을 조정하는 것보다 느린 함수를 C #으로 작성하는 것이 더 쉬울 수 있습니다. 그러나 프로그래머 효율성 관점에서 F #에서 시작 / 프로토 타이핑 한 다음 프로파일 링, 디스 어셈블 및 최적화하는 것이 좋습니다.

결론은 프로그램 디자인 결정으로 인해 F # 코드가 C #보다 느려질 수 있지만 궁극적으로 효율성을 얻을 수 있다는 것입니다.


최근에 질문 한 다음 질문을 참조하십시오.


다음은이 주제에 대한 (또는 관련) 몇 가지 링크입니다.

Robert Pickering의 블로그 (또는 Scott Hanselman 이었습니까?)의 다른 게시물에서 기억하는 것 같습니다. 결국 둘 다 동일한 프레임 워크에 있기 때문에 둘 다 에서 동일한 성능을 얻을 있지만 때때로 '비틀어 야합니다. '그렇게하는 언어의 자연스러운 표현. 제가 기억하는 예에서 그는 C #과 비슷한 성능을 얻기 위해 F #을 비틀어 야했습니다.

참조 URL : https://stackoverflow.com/questions/144227/c-sharp-f-performance-comparison

반응형