나는 ASP.NET이 작동하는 방식과 더 관련이 있고 여기에 설명하기 위해 최선을 다할 것입니다. 캐싱 및 ASP.NET
나는 내 응용 프로그램- 웹 (ASP.NET 웹 응용 프로그램)
- 비즈니스 (클래스 라이브러리)
- 일반 CRUD 층 ** (클래스 라이브러리)
- 에 네 개의 계층 구조를 가지고 데이터 (클래스 라이브러리)
이 일반 CRUD 레이어는 개체의 속성을 설정하고 읽는 데 리플렉션을 사용하지만, PropertyInfo를 사용하는 것은 상당히 비싸고 따라서 이러한 항목을 캐시하려고합니다. 여기
는 시나리오 :두 사람이 사이트에 액세스, 프레드 짐 그들을 호출 할 수 있습니다. Fred는 Generic CRUD 레이어를 호출하고 Customer 클래스의 속성 정보를 System.RuntimeCache에 캐시하는 Customer를 만듭니다. Jim, 초 후에도 고객을 만듭니다.
제 질문은 Fred와 Jim의 두 요청이 propery 정보를 얻기 위해 두 번 트리거되도록 요청하는 것입니까? 아니면 ASP.NET은 캐시에서 속성 정보를 얻을 때 두 번째로 Jim의 요청을 더 빠르게 캐시에서 가져올 수 있습니까?
내 CRUD가 클래스 라이브러리이고 System.Web.Cache에 대한 액세스 권한이 없기 때문에 속성 정보가 모든 세션/사용자에 캐시되지 않습니다.
"Jim의 요청이 더 빠릅니다"...하지만 캐시에서 나온 경우 올바른 것입니까? 그들이 캐시 된 고객을 공유한다면 중요할까요? – spender
PropertyInfo를 사용하는 것이 상당히 비싸다는 것을 읽었 기 때문에 최적화하지 마십시오. 프로파일 링을 사용하여 병목 현상을 최적화 한 다음 찾아야 할 때까지 기다리십시오. 조기 최적화는 거의 항상 시간 낭비입니다. 또한 PropertyInfo 사용 속도가 느리지 만 GetPropertyInfo()에 대한 반복 호출을 피하는 솔루션이 있지만 업데이트를 수행 할 때마다 SetProperty()를 호출하는 것과 똑같이 사용하게됩니다. –
우연히 propertyinfo를 사용하는 대안이 있습니까? 데이터의 대규모 수집을 통해이를 사용하고 결과를 분석 할 때 일부 진단 프로그램을 실행할 것입니다.* 편집 그냥 Reflection.Emit라는 것을 발견, 누구든지 대안으로 사용? * –