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 #보다 느려질 수 있지만 궁극적으로 효율성을 얻을 수 있다는 것입니다.
최근에 질문 한 다음 질문을 참조하십시오.
- 프로그램 F #이 C #보다 더 효율적입니까 (실행 방식)?
- 실제 세계에서 함수형 프로그래밍을 어떻게 사용할 수 있습니까?
- F #이 향후 다른 .Net 언어보다 더 최적화 될 수 있습니까?
다음은이 주제에 대한 (또는 관련) 몇 가지 링크입니다.
- http://cs.hubfs.net/forums/thread/3207.aspx
- http://strangelights.com/blog/archive/2007/06/17/1588.aspx
- http://khigia.wordpress.com/2008/03/30/ocaml-vs-f-for-big-integer-surprising-performance-test/
- http://cs.hubfs.net/blogs/f_team/archive/2006/08/15/506.aspx
- http://blogs.msdn.com/jomo_fisher/
Robert Pickering의 블로그 (또는 Scott Hanselman 이었습니까?)의 다른 게시물에서 기억하는 것 같습니다. 결국 둘 다 동일한 프레임 워크에 있기 때문에 둘 다 에서 동일한 성능을 얻을 수 있지만 때때로 '비틀어 야합니다. '그렇게하는 언어의 자연스러운 표현. 제가 기억하는 예에서 그는 C #과 비슷한 성능을 얻기 위해 F #을 비틀어 야했습니다.
참조 URL : https://stackoverflow.com/questions/144227/c-sharp-f-performance-comparison
'programing' 카테고리의 다른 글
AWS EC2 Auto Scaling 그룹 : 최소 및 최대를 얻지 만 원하는 인스턴스 제한은 무엇입니까? (0) | 2021.01.14 |
---|---|
Docker-compose mysql 연결이 준비되었는지 확인 (0) | 2021.01.14 |
prototype.constructor.apply를 호출하여 JavaScript 객체 인스턴스화 (0) | 2021.01.14 |
jQuery를위한 최고의 리치 텍스트 영역 편집기는 무엇입니까? (0) | 2021.01.14 |
JavaScript로 파일 다운로드 시작 (0) | 2021.01.14 |