2010-01-12 1 views
1

특정 코드에서 Type.GetFields()를 여러 번 사용하십시오. 하나의 호출은 5 번 이상 호출 할 수 있습니다. 또한 코드는 수천 번 반복 될 수 있습니다. ATM은 이 필요합니다.이 필요하지만, 제가 어떻게해야하는지 알고 싶다면 부탁드립니다.캐싱 Type.GetXYZ

어떻게 캐시 할 수 있습니까? obj.GetType(). Tag [ "myCacheId"]와 같은 작업을 수행하고 캐시 된 데이터를 가져올 수 있기를 바랍니다. 그러나 나는 이것을 할 수 있을지 의심 스럽다. 어떻게 든 형식에 데이터를 첨부 할 수 있습니까? 나는 정말로 내가 싱글 톤에 의지하지 않기를 바란다. Type과 관련된 데이터를 어떻게 캐시 할 수 있습니까?

+0

매우 많은 필드를 가져올 필요가있는 곳에 수천 번 반복되는 이유를 이해해야합니다. 적절한 답을 줄 수있는 여러 유형. –

답변

3

CLR을 이미 메타 데이터를 캐시합니다. 처음 호출 할 때 어셈블리에서 빠져 나오면 속도가 매우 느립니다. 이후에는 빠릅니다. 캐싱은 아무런 차이를 만들지 않을 것입니다.

+0

사실, 당신은 종종 메서드 호출을 제거함으로써 그것을 향상시킬 수 있습니다. – codekaizen

+0

나는이 말을 한 번 들었지만 캐시 된 것은 나에게 분명하지 않았다. 그 메타 데이터가 내가 만지는 경우 위 =). 나는 정말로 필요할 때 시험 할거야. 이제 그것에 대해 생각하면 코드가 충분히 빠를 것입니다. –

0

는 그냥 방법의 시작 부분에 또는 루프 전에처럼, 어딘가 FieldInfo[]에 스틱 :

FieldInfo[] fields = Type.GetFields((BindingFlags.Public | 
    BindingFlags.Static | BindingFlags.Whatever)); 
0

많은 유형이있는 경우 사전을 사용하여 각 유형에서 해당 유형의 캐시 된 정보로 매핑 할 수 있습니다. (그러나 이것은 사전 조회가 Type.GetFields 연산보다 빠르면 도움이 될 것입니다!)