2012-10-24 3 views
0

나는 ASP.NET이 작동하는 방식과 더 관련이 있고 여기에 설명하기 위해 최선을 다할 것입니다. 캐싱 및 ASP.NET

나는 내 응용 프로그램

  1. 웹 (ASP.NET 웹 응용 프로그램)
  2. 비즈니스 (클래스 라이브러리)
  3. 일반 CRUD 층 ** (클래스 라이브러리)
  4. 에 네 개의 계층 구조를 가지고 데이터 (클래스 라이브러리)

이 일반 CRUD 레이어는 개체의 속성을 설정하고 읽는 데 리플렉션을 사용하지만, PropertyInfo를 사용하는 것은 상당히 비싸고 따라서 이러한 항목을 캐시하려고합니다. 여기

는 시나리오 :

두 사람이 사이트에 액세스, 프레드 짐 그들을 호출 할 수 있습니다. Fred는 Generic CRUD 레이어를 호출하고 Customer 클래스의 속성 정보를 System.RuntimeCache에 캐시하는 Customer를 만듭니다. Jim, 초 후에도 고객을 만듭니다.

제 질문은 Fred와 Jim의 두 요청이 propery 정보를 얻기 위해 두 번 트리거되도록 요청하는 것입니까? 아니면 ASP.NET은 캐시에서 속성 정보를 얻을 때 두 번째로 Jim의 요청을 더 빠르게 캐시에서 가져올 수 있습니까?

내 CRUD가 클래스 라이브러리이고 System.Web.Cache에 대한 액세스 권한이 없기 때문에 속성 정보가 모든 세션/사용자에 캐시되지 않습니다.

+0

"Jim의 요청이 더 빠릅니다"...하지만 캐시에서 나온 경우 올바른 것입니까? 그들이 캐시 된 고객을 공유한다면 중요할까요? – spender

+6

PropertyInfo를 사용하는 것이 상당히 비싸다는 것을 읽었 기 때문에 최적화하지 마십시오. 프로파일 링을 사용하여 병목 현상을 최적화 한 다음 찾아야 할 때까지 기다리십시오. 조기 최적화는 거의 항상 시간 낭비입니다. 또한 PropertyInfo 사용 속도가 느리지 만 GetPropertyInfo()에 대한 반복 호출을 피하는 솔루션이 있지만 업데이트를 수행 할 때마다 SetProperty()를 호출하는 것과 똑같이 사용하게됩니다. –

+0

우연히 propertyinfo를 사용하는 대안이 있습니까? 데이터의 대규모 수집을 통해이를 사용하고 결과를 분석 할 때 일부 진단 프로그램을 실행할 것입니다.* 편집 그냥 Reflection.Emit라는 것을 발견, 누구든지 대안으로 사용? * –

답변

0

Alexei Levenkov가 지적한 것처럼 명시 적으로 캐싱을 구성해야합니다. 특정 속성 값의 자동 캐싱을 얻지는 않습니다.

PropertyInfo를 사용하는 것이 속성에 직접 액세스하는 코드를 작성하는 것보다 비용이 많이 들지만 데이터베이스 왕복 비용이나 서버와 최종 사용자 간의 대기 시간과 비교할 때 비쌉니다. Entity Framework, WebForms 및 MVC와 같은 도구는 성능 비용이 발생하기 때문에 유지 관리 비용을 줄여야하므로 리플렉션을 광범위하게 사용합니다.

조숙 한 최적화를 피하십시오.

1

아니요, 사용자가 별도로 코딩하지 않는 한 요청마다 새로운 쿼리를 실행합니다.

모두 구성/사용할 수있는 ASP.Net 응용 프로그램 (브라우저, 프록시, 서버 측 응답 캐싱, 중간 개체 캐싱, DA 계층 캐싱)에서 발생할 수있는 여러 캐싱 계층이 있습니다. 그러나 ASP.Net (또는 모든 응용 프로그램)에서 코드/규칙/구성을 작성하지 않는 한 아무 것도 캐시되지 않습니다.