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

보기: 54151|회답: 3

[출처] .NET/C# 반사, 방출, 표현 성능 테스트

[링크 복사]
2021-3-21 13:23:34에 게시됨 | | | |
반사에 관한 논문 리뷰:

.net/c#은 반사 동적 실행 방식을 활용합니다
https://www.itsvse.com/thread-4771-1-1.html

C#은 반사를 사용하여 속성이 할당되었는지 판단합니다
https://www.itsvse.com/thread-3045-1-1.html

C# 반사는 객체 속성의 디스플레이네임을 얻습니다
https://www.itsvse.com/thread-3219-1-1.html
EMIT 리뷰 소개:

.NET/C# Emit은 동적으로 어셈블리를 생성합니다
https://www.itsvse.com/thread-9597-1-1.html
먼저, 간단한 객체를 생성하고 객체를 인스턴스화한 후 emit과 expression을 사용해 객체 값을 읽고 수정하면, 실행 결과가 아래 그림과 같이 예상대로 나옵니다:



BenchmarkDotNet을 이용한 벤치마크 테스트, Net472와 NetCoreApp31에서 실행되는 객체 값만 읽는 벤치마크 결과는 다음과 같습니다:


.NET/C#은 BenchmarkDotNet을 사용하여 코드 성능을 테스트합니다
https://www.itsvse.com/thread-9576-1-1.html


요약:

emit과 expression 모두 reflection을 사용하는 값보다 효율적이며, .NET 4.7.2 프레임워크에서는 emit이 expression 실행 효율보다 낫지만, .NET Core 3.1 프레임워크에서는 expression이 emit 실행보다 우수합니다.

프로그램이 객체를 한 번만 동적으로 실행하면 되고, 다시 캡슐화하거나 대리자를 만들 필요가 없으므로 반사를 사용하는 것이 권장됩니다. 그리고 프로그램이 객체를 여러 번 동적으로 실행해야 한다면 emit이나 expression을 사용하는 것이 권장되며, 물론 추가적인 캡슐화가 필요합니다.

테스트 코드는 다음과 같습니다:

Expression을 사용해 객체 값을 얻을 때, 오류는 다음과 같이 보고됩니다:

'System.Int32' 타입의 표현식은 반환 타입 'System.Object'에 사용할 수 없습니다.
이 사람들이 어떻게 쓰는지 정말 모르겠어요, 복사해서 붙여넣는 것만 알아요!




이전의:.NET/C# Emit은 동적으로 어셈블리를 생성합니다
다음:.NET 코어는 gRPC HTTP(비TLS 보호) 주소 오류 솔루션을 호출합니다
 집주인| 2025-4-28 14:53:41에 게시됨 |
Expression을 사용해 객체 속성에 값을 할당하세요:


콜:
 집주인| 2025-4-28 15:32:51에 게시됨 |
.NET/C# 읽기 전용 필드 내용을 수정하기 위해 UnsafeAccessor를 사용해
https://www.itsvse.com/thread-10997-1-1.html
 집주인| 2025-4-28 15:40:57에 게시됨 |
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com