beforefieldinit 플래그는 무엇을합니까?
beforefieldinit 플래그는 무엇을합니까? 내 클래스의 IL을 살펴보면이 플래그가 표시되지만이 플래그가 실제로 무엇을하는지 모르겠습니다.
이 문제에 대한 내 기사 를 참조하십시오 .
기본적으로 beforefieldinit
"정적 필드가 참조되기 전에 언제든지 유형을 초기화 할 수 있습니다."라는 의미입니다. 이론적으로 이는 매우 느리게 초기화 될 수 있음을 의미합니다. 필드를 건드리지 않는 정적 메서드를 호출하면 JIT가 유형을 초기화 할 필요가 없습니다.
실제로 는 클래스가 초기화되는 것을 의미한다 이전 은 그렇지 않은 것보다 -이 첫 번째 방법의 시작에 초기화하는 것이 괜찮아 수 를 사용합니다. 유형이 비교 하지 않는 한 beforefieldinit
유형의 초기화가 첫 직전에 발생하는 그들에 적용, 실제 사용.
따라서 다음이 있다고 가정합니다.
public static void DoSomething(bool which)
{
if (which)
{
FirstType.Foo();
}
else
{
SecondType.Bar();
}
}
두 유형이 모두 beforefieldinit
적용된 경우 (C #에서는 유형에 정적 생성자가없는 경우 기본적으로 수행됨) 메서드 시작시 둘 다 초기화됩니다 DoSomething
(보통-보장되지 않음). 그들은이없는 경우 beforefieldinit
만 한 그들 중은 플래그를 기반으로 초기화됩니다.
이것이 싱글 톤 패턴을 구현할 때 정적 생성자를 사용하는 것이 일반적입니다 (빈 생성자라도!) .
4.6에서 변경 될 것 같습니다.
https://github.com/dotnet/coreclr/issues/1193
참고 URL : https://stackoverflow.com/questions/610818/what-does-beforefieldinit-flag-do
'developer tip' 카테고리의 다른 글
JIRA : 닫거나 해결하려면? (0) | 2020.10.19 |
---|---|
'네트워크 서비스'로 '실행'하려면 어떻게해야합니까? (0) | 2020.10.19 |
레일스 form_tag에 html ID를 추가하는 방법 (0) | 2020.10.19 |
X“”가있는 빈 문자열 테스트 (0) | 2020.10.19 |
knockout.js-DOM 요소에서 ViewModel 가져 오기 (0) | 2020.10.19 |