응용 프로그램 시작시 데이터베이스 연결의 인스턴스를 캐시해도됩니까? 스레드 안전에 MSDN documentation 보면정적 캐싱 DatabaseFactory.CreateDatabase를 사용할 수 있습니까?
는, 내가 인용 :
모든 공용 static [...] 이러한 유형의 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버가 스레드로부터 안전하다는 보장은 없습니다. 이 허용하는 경우
public static class BookingMapper { public static Database Db { get; set; } static BookingMapper() { Db = DatabaseFactory.CreateDatabase(); } public static string GetBooking(int id) { using (DbCommand cmd = Db.GetStoredProcCommand("getBooking")) { Db.AddInParameter(cmd, "@Id", DbType.Int32, id); using (IDataReader dr = Db.ExecuteReader(cmd)) { ... } } } }
가, 혜택/단순히 데이터베이스 인스턴스를 통해 이러한 방식을 사용하는 단점이 무엇인가 : 같은 아래 예제대로/허용 코드에 대한 안전하다는 것을 감안할 때
모든 단일 메소드 호출에서?
미리 감사드립니다.
업데이트 :
더 많은 연구가 Putting the Database Factory to Use
섹션에서이 허용 제안하는 PrimaryObjects.com article에 저를 지적했다. 그러나 나는 이런 식으로하는 것이 장단점이 있는지 궁금해하고있다.
@ damien, 나는이 주제에 대해 좀 더 조사해 보았고 편집에 언급 된대로 http://www.primaryobjects.com/CMS/Article81.aspx로 안내했습니다. 이런 식으로해도 괜찮은 것 같지만 찬반 양론에 대한 분석은없는 것 같습니다. –
포인트 3으로 판단하면 인스턴스 자체를 만드는 데 절약 효과가 많이 없음은 아닙니다. –
나는 ent lib를 설치 한 후에 "src"디렉토리에서 설치할 수있는 소스를보고 나서 포인트 3을 만들었습니다. 그러면 다양한 기능 안에서 얼마나 많은 작업이 수행되는지 확인할 수 있습니다. (또는 소스를 설치하지 않으려는 경우 반사경을 통해 비슷한 정보를 얻을 수 있습니다) –