(공유) SQL Server 데이터베이스를 사용하여 ASP.NET 4.5에서 실행되는 사이트가 있습니다. 우리 ISP는 최근 우리에게 개방 된 연결이 너무 많아서 서버의 전반적인 안정성에 영향을주고 있다고 말했습니다. 로드가 많은 경우이 숫자는 사이트를 방문하는 약 200 명의 동시 사용자와 400 개 이상의 연결을 열 수 있습니다.엔터티 프레임 워크 연결 열기
사이트는 주로 리뷰 및 블로그 게시물과 같은 콘텐츠로 이루어져 있으며 사이트 전체에서 캐싱을 구현했습니다. 우리는 Entity Framework를 독점적으로 사용하여 데이터베이스를 쿼리합니다. 우리는 StructureMap을 사용하여 연결 문자열을 비즈니스 로직 클래스에 삽입합니다.
StructureMap 초기화 : 우리의 서비스에서 다음
var ecsbuilder = new EntityConnectionStringBuilder();
ecsbuilder.Provider = "System.Data.SqlClient";
ecsbuilder.ProviderConnectionString = @"data source=***;initial catalog=***;persist security info=True;User ID=***;Password=***;multipleactiveresultsets=True;App=EntityFramework";
ecsbuilder.Metadata = @"res://*/Data.***.csdl|res://*/Data.***.ssdl|res://*/Data.***.msl";
string connectionString = ecsbuilder.ToString();
For<SiteModelContainer>().Use<SiteModelContainer>().Ctor<string>("connectionString").Is(connectionString);
For<IGalleryService>().Use<GalleryService>();
...all the rest of our services
(예 GalleryService
) 우리는 다음과 같은 한 : 우리의 서비스 방법에서
private readonly SiteModelContainer _context;
public GalleryService(SiteModelContainer context)
{
this._context = context;
}
우리가 데이터베이스
을 조회 할 수 _context
를 사용 제 질문은 다음과 같습니다 :
- 이것이 우리가 데이터베이스를 쿼리하는 유일한 방법이라면 어떤 이유로 연결을 닫지 않는 것입니까?
- 연결이 열려있는 위치를 결정하는 데 사용할 수있는 방법은 무엇입니까?
주셔서 감사합니다 연결 문자열에
이 또한 내가 문을 "사용"을 사용하지만 연결이 유출 된 곳에서 찾을 수 없습니다 비록 나에게 일어났다. – Mairaj
연결 풀링이 도움이됩니다. 가능한 경우 캐싱 계획을 재 작업하는 것을 고려할 수도 있습니다. 제대로 수행되면 캐싱은 상당한 양의 백엔드 호출을 db에 대해 제거 할 수 있어야합니다. –
@MairajAhmad StructureMap이 컨텍스트를 자동으로 삭제한다는 인상하에 있었습니까? – Peuge