我們有一個使用(共享)SQL Server數據庫在ASP.NET 4.5上運行的站點。我們的ISP最近告訴我們,我們有太多的開放連接,它影響了服務器的整體穩定性。在高負載情況下,這個數量可以達到多達400多個打開的連接,大約200個併發用戶訪問該站點。實體框架打開連接
該網站主要由評論和博客文章等內容組成,我們已在整個網站實施緩存。我們專門使用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 2014-09-04 05:00:03
連接池應該有所幫助。如果可能的話,也可能要考慮重新制定緩存計劃。如果正確完成,緩存應該能夠將大量的後端調用移除到數據庫。 – 2014-09-04 05:15:36
@MairajAhmad我的印象是StructureMap自動處理上下文嗎? – Peuge 2014-09-04 06:15:45