2009-10-07 3 views
5

간단한 람다식이 인라인됩니까?람다가 인라인 될까요?

저는 하나의 함수 내에있는 반복 코드를 람다로 캡슐화하고 대신 호출하는 경향이 있습니다 (f # 및 기타 기능성 침략 덕분에).

var foo = a + b; 
var bar = a + b; 

V 하나를 실행하는 데 더 많은 비용

Func<T1, T2> op =() => a + b; 
var foo = op(); 
var bar = op(); 

: 난 결과로 런타임 오버 헤드를 초래하고있어 경우에 나는 궁금 하군요?

답변

3

아니요. 람다 함수는 인라인되지 않고 대신 대리인으로 저장되어 다른 대리인과 동일한 비용의 실행이 발생합니다.

+1

* 한숨 *. 그 작은 속임수 때문에. 감사. – kolosy

7

성능 질문에 답하려면 다음과 같이하십시오. 각각의 비용을 측정하십시오. 그럼 알게 될거야. 어떤 하드웨어를 사용하고 있는지, 관련 시나리오에 어떤 잡음이 있는지, 중요한 성능 척도로 간주되는지는 알 수 없습니다. 당신은 그 것을 아는 유일한 사람입니다. 그래서 당신은 질문에 대답 할 수있는 유일한 사람입니다.

codegen 질문에 대답하려면 : Jared는 맞지만 대답은 확장 될 수 있습니다.

첫째, 결코어떤 코드 인라인을 수행하는 C# 컴파일러. jit 컴파일러는 코드의 인라이닝을 수행하지만 C# 컴파일러가 델리테 인스턴스로 람다를 생성한다는 사실은 지터가 합리적으로이 코드를 인라인 할 수 있음을 의미합니다. 물론 이 가능합니다. 동일한 코드가 항상 위임에 있음을 확인하기 위해 정교한 분석을 수행하는 지터에 대해서는이 가능하지만 실제로는 이러한 알고리즘이 구현되지 않았다고 생각합니다.)

원한다면 인라인 될 코드는 줄을 써야합니다. 만약 당신이 줄을 쓰고 싶지는 않지만 여전히 인라인되어 지길 원한다면, 정적 인 방법으로 쓰고 지터가 인라인하기를 바랍니다.

하지만 상관없이, 이는 조숙 한 최적화와 같습니다. 코드를 작성한 다음 코드를 작성한 다음 성능을 분석 한 다음 느린 내용을 다시 작성하십시오.

관련 문제