문제

인라인이란 무엇입니까?

무엇에 사용됩니까?

C#에서 뭔가를 인라인 할 수 있습니까?

도움이 되었습니까?

해결책

그것이 무엇인지

C 및 C ++ 측면에서 인라인 키워드를 사용하여 매개 변수를 스택에 푸시하는 오버 헤드없이 컴파일러에게 루틴을 호출하도록 지시합니다. 대신이 함수에는 기계 코드가 호출 된 기능에 삽입되어 있습니다. 이로 인해 특정 시나리오에서 성능이 크게 향상 될 수 있습니다.

위험

인라인 함수의 크기가 증가함에 따라 "인화"를 사용하는 데있어 속도의 이점은 크게 감소합니다. 과용은 실제로 프로그램이 느리게 실행될 수 있습니다. 매우 작은 액세서 함수를 인화하면 일반적으로 코드 크기가 줄어들면서 매우 큰 함수를 인화하면 코드 크기가 크게 증가 할 수 있습니다.

C#에서 인라인

C# Inlining에서 JIT 컴파일러가 결정을 내리는 JIT 레벨에서 발생합니다. C#에는 현재이 작업을 명시 적으로 수행 할 수있는 메커니즘이 없습니다. JIT 컴파일러가 무엇을하고 있는지 알고 싶다면 다음과 같이 호출 할 수 있습니다. System.Reflection.MethodBase.GetCurrentMethod().Name 런타임에. 메소드가 상감되면 대신 발신자의 이름을 반환합니다.

C#에서는 메소드를 인라인으로 강제로 강요 할 수는 없지만 방법을 강제로 강제로 만들 수 있습니다. 특정 Callstack에 액세스 해야하는 경우 Inlining을 제거 해야하는 경우 사용할 수 있습니다. MethodImplAttribute ~와 함께 MethodImplOptions.NoInlining. 또한 메소드가 가상으로 선언되면 JIT에 의해서도 상거되지 않습니다. 그 이유는 전화의 최종 목표를 알 수 없기 때문입니다.

인라인에 대한 자세한 내용

다른 팁

인라인에 대한 정의와 토론을 위해 이 질문을 참조하십시오.

C#에서는 런타임이 자동으로 수행되므로 컴파일러 또는 런타임을 인라인에 지시 할 필요가 없습니다.

추신 :이 답변은 Java에게도 정확합니다.

인라인은 특정 함수를 호출하는 대신 함수의 내용이 호출 사이트에서 직접 수행됩니다. 이를 수행하는 주된 이유는 캘리 타이트에서 함수 내용을 실행하여 함수를 호출하는 오버 헤드를 제거하기 때문입니다.

최적화 기술로 사용됩니다. C#의 경우 실제로 작업을 수행하기 위해 CLR JIT 엔진에 따라 다릅니다. 런타임에서 메소드를 컴파일 할 때 JIT 엔진은 휴리스틱을 사용하여 기능 인라인이 적절한 지 확인하고 효율적인 최적화가 될 것입니다. 그렇다면 인라인이 수행됩니다.

Vance는 JIT가 인라인 할 때 고려하는 것에 대한 훌륭한 기사를 가지고 있습니다. http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to-inline-s that-is-hinquestion.aspx

C#에서 인라인을 강요 할 방법은 없습니다. 언어는이 구성을 지원하지 않습니다. 주로 사람들은 무엇을 최적화 해야하는지에 대한 판사가 매우 열악하기 때문입니다. Jiter는 훨씬 더 나은 판사입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top