2010-03-20 2 views
1

있습니다. 방금 vs2010의 새로운 성능 분석 도구를 실행했으며이 기능이 대부분의 CPU 리소스를 소모한다는 사실이 밝혀졌습니다.Field.SetValue 대체

내가 사용할 수있는 다른 것이 있습니까?

+0

프로필러를 사용한 후에 * 문제가 있음을 알게되었습니다. 물론 FieldInfo.SetValue가 느리며, 실제로 * 원인 * 문제가 있습니까? –

답변

2

당신이 일하기 위해 일리노이를 알아 보는 데 드는 시간을 즐기는 일부 소수의 사람들에게 속한 경우가 아니라면, 당신을 위해이 일을하기 위해 도서관을 선택하는 것이 더 나을 것이라고 믿습니다.

Fasterflect은 v2.0에서 방금 출시되었으며 .NET 3.5와 4.0을 모두 지원할 수 있습니다. 경량 코드 생성 및 캐싱을 사용하여 정규 반영보다 4-5 배 속도 향상 또는 거의 기본 속도 (동적 메서드의 초기 JIT 컴파일을위한 상당한 오버 헤드는 계산하지 않음)에 대해 생성 된 대리자에 대한 직접 액세스를 사용합니다.

면책 조항 : 본인은 기고자로서 상기 프로젝트에 참여했습니다.

3

확실한 답변을 제공하기 위해 상황에 대한 세부 정보는 충분하지 않지만 동일한 필드를 반복적으로 설정하는 경우 (런타임까지는 어떤 필드를 모르지만) 설정할 동적 방법을 만들 수 있습니다 필드를 반복적으로 호출합니다. 자세한 내용은 DynamicMethod class (how to 문서, case study with examples)을 참조하십시오.

(System.Linq.Expressions 클래스를 사용하여) 필드를 설정하고 LambdaExpression.Compile을 사용하여 필드를 컴파일하는 식을 작성하여 더 쉽게 동일한 것을 얻을 수 있어야합니다. 일반적으로 Reflection.Emit을 사용하는 것보다 쉽지만 일반적으로 필드는 비공개 멤버이므로 사용자에게 적합하지 않을 수 있습니다.

다른 필드를 많이 설정하고 각 필드를 몇 번만 설정하는 경우 동적 메서드를 생성하거나 식을 컴파일하는 오버 헤드가 FieldInfo.SetValue를 호출하는 것보다 훨씬 입니다. 항상 그렇듯이 결정하기 전에 측정하십시오!