2009-11-25 3 views
0

나는 다음과 같은 매우 흥미로운 클래스 ... 아이디어 캐싱 누구?

pubilc class Thing{ 

public Thing() 
{ 
    DoSomethingThatTakesALongTime(); 
} 

pubic boolean CheckSomething(string criteria) 
{ 
    return criteria == "something"; 
} } 

내 ASP.Net MVC 응용 프로그램에서, 나는 매우 자주, CheckSomething에 전화를 호출 할 필요가있다.

보시다시피 생성자가로드되는 데 시간이 오래 걸립니다.

클래스를 캐시하는 데 사용할 수있는 접근 방법은 무엇입니까? 나는 그것을 시험 가능하게하고 싶다는 것을 명심해라. ... 그리고 나는 그것이 수반하는 것이 무엇인지에 관해 모른다! !!!

건배,

ETFairfax

답변

2

캐시 (HttpContext.Cache)에 인스턴스를 추가 메모리 공유를위한 플라이 웨이트 패턴)

클래스의 인스턴스를 반환하는 팩토리를 만듭니다. 캐시 인스턴스가

  • 반환 인스턴스를

    • 를 만들 수 없습니다

    경우 예를

  • 캐시 경우 공장이

    과 같을 것이다

  • 캐시 인스턴스
  • 반환 인스턴스

캐시의 경우 HttpContext 캐시 또는 엔터프라이즈 라이브러리 캐시를 사용할 수 있습니다. 이는 패턴이된다 아래

EDIT

흥미 토론. 다음과 같이

나의 이해는 다음과 같습니다

  • 내가 뭔가 공장, 따라서 공장 패턴 즉, 객체를 생성하기 위해 뭔가를 부탁드립니다.
  • 메모리, 플라이 웨이트 패턴에서 객체를 재사용하려고합니다.이 예에서 파이썬 코드는 매우 내 대답은 다음과 같습니다 http://en.wikipedia.org/wiki/Flyweight_pattern
  • 을하지만 객체의 단일 인스턴스 따라서 싱글 톤 패턴
  • 객체가 저장되는 캐시는 싱글도 있습니다입니다
+1

+1하지만 플라이급 패턴이라고 말할 수 있습니다. 공장과 많이 다르지 않습니다. – JulianR

+0

@JulianR, 감사합니다. 의견을 기반으로 업데이트했습니다. –

+0

플라이급이 아닌 싱글턴이 아니겠습니까? –

2

당신은 그 클래스의 정적 인스턴스를 생성 할 수 있습니다.

어딘가에 :

public static Thing singleThing = new Thing(); 

이제 생성자는 운동하는 특정 응용 프로그램 도메인에 대한 singleThing 변수의 첫 번째 액세스시. 이 작업이 끝나면 객체는 응용 프로그램 도메인 (서버 재시작, 코드 업데이트, web.config의 변경, 재활용 등)이 끝날 때까지 메모리에 보관됩니다. 이는 일단 초기화 된 객체가 응용 프로그램의 모든 클라이언트에서 사용할 수 있음을 의미합니다.

+0

+1 – kurast

0

당신의 일이 클래스는 당신의 aplication (의존하지 세션) 글로벌 무언가를하는 경우 정적 인 클래스를 만들거나 (당신은 그것을 만드는 공장 패턴을 사용할 수