C# 实体框架开放连接
我们有一个网站运行在ASP.NET 4.5上,使用(共享)SQL Server数据库。我们的ISP最近告诉我们,我们有太多的开放连接,这影响了服务器的整体稳定性。在高负载情况下,这个数字可以达到400多个开放连接,大约有200个并发用户访问该站点 该网站主要由评论和博客文章等内容组成,我们在整个网站上实施了缓存。我们专门使用实体框架来查询数据库。我们使用StructureMap将连接字符串注入到业务逻辑类中 StructureMap初始化:C# 实体框架开放连接,c#,sql,asp.net,entity-framework,C#,Sql,Asp.net,Entity Framework,我们有一个网站运行在ASP.NET 4.5上,使用(共享)SQL Server数据库。我们的ISP最近告诉我们,我们有太多的开放连接,这影响了服务器的整体稳定性。在高负载情况下,这个数字可以达到400多个开放连接,大约有200个并发用户访问该站点 该网站主要由评论和博客文章等内容组成,我们在整个网站上实施了缓存。我们专门使用实体框架来查询数据库。我们使用StructureMap将连接字符串注入到业务逻辑类中 StructureMap初始化: var ecsbuilder = new Entity
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
在我们的服务方法中,我们只使用\u context
查询数据库
我的问题是:
public class DaatabaseFramework
{
public static SiteModelContainer GetContext()
{
return new SiteModelContainer();
}
}
using (var context=DaatabaseFramework.GetContext())
{
}
//使用下面的命令来使用上下文
public class DaatabaseFramework
{
public static SiteModelContainer GetContext()
{
return new SiteModelContainer();
}
}
using (var context=DaatabaseFramework.GetContext())
{
}
当我试图通过使用(…连接…{}块传递IQueryable变量时,我看到了类似的情况 当我这么做的时候,孤立的连接就像你的一样留在我的网站上 尝试查找如下代码:
public IQueryable<YourClass> func(int param1) {
using(var context=DaatabaseFramework.GetContext()) {
return context.MyTable.Where(_=>_.Param1==Param1);
}
}
public可查询函数(int参数1){
使用(var context=DaatabaseFramework.GetContext()){
返回context.MyTable.Where(=>u.Param1==Param1);
}
}
这也发生在我身上,尽管我使用了“using”语句,但无法找到连接泄漏的位置。连接池应该会有所帮助。如果可能的话,也可以考虑重新设计缓存计划。如果操作得当,缓存应该能够删除大量对数据库的后端调用。@MairajAhmad我觉得StructureMap会自动处理上下文?我没有使用它。