Karl Seguin
그는 물었다 12년 전
23

Net 에서는 메서드 호출) 은 빈 최적화되어야 아웃해야?

Jit 는 빈 방법을 고려할 때 몸을 최적화합니다 아웃해야 호출 (그러니까말이야 C # 컴파일러 won& # 39, t). 내가 어떻게 gnu. 찾기 정보 아웃해야? 저 어떤 도구를 사용하고 난 어디 볼 수 있음?

39 m, 이후 I& it& 합니다 # 39 는 빈 방법, 이유, ll be 질문과대답 디렉티브을 방법이다.

-

@Chris: 일리있네요 아웃해야 수 있지만 최적화합니다 대한 호출을 메서드입니다. 따라서 메서드를 호출할 수 있지만, 여전히 존재할 수 있다면 정적 제거 (또는 최소한 린린드.)

@Jon: 그건 저에게 알려 :에서 컴파일러와의 doesn& # 39, 아무것도 하지 않는다. 내가 해야 할 것 같은데 내 dll 을 통해 국회에서 실행하십시오 너건 살펴보고 있다.

답변 4 개

39 는 다음과 같은 코드에서 i& m 추측.

void DoSomethingIfCompFlag() {
#if COMPILER_FLAG
    //your code
#endif
}

그러나 이 won& # 39, 최적화된 아웃해야 수 없다.

partial void DoSomethingIfCompFlag();

#if COMPILER_FLAG
partial void DoSomethingIfCompFlag() {
    //your code
}
#endif

빈 방식은 첫 번째 부분 및 C # 3 컴파일러에서 최적화 아웃해야.

-

그나저나. 이것은 기본적으로 어떤 부분 방법이 있습니다. Microsoft 추가되든지 코드 생성기, 기본적으로 하는 그들의 Linq 디자이너 호츨 메서드입니다 don& # 39 아무 짓도 하지 않을 수 없다.

이 부분 사용할 수 있는 방법이 아닌 인력용 오버로드할 수 있습니다.

이 방식을 사용하지 않을 경우 성능 최적화 아웃해야 파셜 전혀 받지 않고, 대신 실주했습니다 추가 부담이 추가 빈 메소드 호출이 그것이다.

Keith
Eric
그는 6년 전 댓글을 달았습니다
2

속성을 사용하여 [조건 (COMPILER_FLAG&quot ";)] 조금 더 것으로, 그 같은 효과를 사용할 수 있습니다. 지켜보리니 http://msdn.microsoft.com/en-us/library/4xssyw96.aspx

이 chap) 는 매우 좋은 치료를 위해 페이지, & # 39 의 실시간 검색 최적화 실행하십시오 empty& # 39 의 절반 정도 줄이는 방법은 it& # 39 이 -;

http://www.codeproject.com/KB/dotnet/JITOptimizations.aspx

확실히 할 수 있는 방법을 통해 최적화된 아웃해야 인라이닝 지정하십시오. 효과적으로 발작이에요.

@Chris: 나는한다 확보할 수 있는 방법을 계속 일부라야 바이너리, 그리고 그 다음은 JIT 최적화 :-). 스콧 한스엘만 꽤 흥미로운 기사를 참고 있는 세미 관련 있는 릴리스에는 콜 스택 구축하십시오 인라이닝 했다.

http://www.hanselman.com/blog/ReleaseISNOTDebug64bitOptimizationsAndCMethodInliningInReleaseBuildCallStacks.aspx

아니, 빈 메소드가 배반자들의 최적화되었는지 초과됩니다. 다음은 몇 가지 이유:

  • 에서 메서드를 호출할 수 있습니다 파생 클래스, 아마도 인할지 다른 조립품을
  • 할 수 있는 방법 반사 (경우에도 사용하여 호출할 이는 선택함 사설)

편집: 예, etlat (렉셀레나) 에서 없앨 수 있는 코드를 보고 프로젝트 doc 페이징됩니다 지터 비어 있습니다. 그러나 여전히 컴파일됨 및 일부분으로 값의 바이너리임 이유는 내가 스스로 메서드을 거역한다면 나열되었습니다.

예, 모든 것을 최적화합니다 기술입니까 비유하 한다 "고 말했다. 실시간 inlines 적절한 기능을 몇 가지 기능을 보다 많고 더 적절한 빈:)

그럼 진짜 원한다면 변경하십시오 확인할 수 있는 방법을 스택 추적 및 인쇄 아웃해야 예외가 있습니다.