이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 24478|회답: 2

[출처] C# 성능 최적화: Lazy는 지연을 적용해 lazy 초기화 <T>

[링크 복사]
게시됨 2019. 6. 17. 오후 4:17:17 | | | |
1. 개요

객체를 생성하는 데 많은 소비가 필요하며, 실행 중에 이 객체를 사용하지 않을 수 있으므로, 매번 객체를 생성하지 않도록 레이지 초기화(게으른 인스턴스화라고도 함)가 적용됩니다.

지연 초기화는 에서 발생합니다. NET 4.0은 주로 성능 향상, 낭비되는 계산 방지, 프로그램 메모리 요구량 감소에 사용됩니다. 이를 주문형 로딩(on-demand loading)이라고도 부릅니다.

2. 기본 문법


3. 예제를 통해 구현하기

다음 코드로 학생 클래스를 생성하는 것부터 시작하세요:

다음 코드로 콘솔 프로그램을 생성하세요:

디버깅 중단점을 설정한 후, 새 버전 이후 Student의 IsValueCreated 값이 false이고 값의 값이 null임을 알게 되었습니다



그러면 Name 속성을 호출하면 student의 IsValueCreated 값이 참이 되어 값이 null이 아닙니다



득점 결과:



학생은 이름 속성이 출력될 때만 초기화되며, 이는 처음 사용할 때 초기화되어 소비를 줄이려는 목적을 달성하기 위함입니다.

이 예시는 <T>Lazy를 사용하는 가장 기본적이고 간단한 방법입니다. 또한<T> Lazy의 오버로드 함수인 Lazy<T> (Func<T>)를 사용해 반환 값이 있는 delegate를 전달하여 lazy 초기화 객체의 속성 값을 설정할 수도 있습니다.

득점 결과:



참고: 레이지<T> 객체 초기화는 기본적으로 스레드 안전하며, 다중 스레드 환경에서는<T> 레이지 객체의 Value 속성에 처음 접근한 스레드가 레이지 객체를 초기화하고<T>, 이후 액세스 스레드는 처음으로 초기화된 데이터를 사용합니다.

4. 적용 시나리오

생성하는 데 많은 오버헤드가 필요한 객체가 있는데, 프로그램이 그것을 사용하지 않을 수도 있습니다. 예를 들어, 프로그램이 시작 시 여러 객체 인스턴스를 로드하지만, 즉시 실행해야 하는 인스턴스는 몇 개뿐이라고 가정해 봅시다. 불필요한 객체의 초기화를 필요한 객체가 생성된 후까지 지연시키면 프로그램 시작 성능을 향상시킬 수 있습니다.






이전의:인터뷰에 관한 몇 가지 진실을 밝히세요
다음:JCSHELL 테스트 도구 사용자 매뉴얼
게시됨 2019. 6. 18. 오후 6:18:32 |
알겠어요
 집주인| 게시됨 2023. 7. 4. 오후 7:19:55 |
C#의 Lazy 사용자가 스레드를 안전하게 지키는 방법
https://www.itsvse.com/thread-10621-1-1.html
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com