C# 数据库服务器太忙。需要关于打开数据上下文的建议
我昨天开始运行这个庞大的系统。成千上万的人同时连接。。我正在使用SQLServer2008和.NET3.5C 今天我注意到我的db服务器变得非常慢,顺便说一句,服务器机器能够轻松处理10倍于此的应用程序,所以我一定是把我的连接搞砸了 首先:我的业务类每个只创建一个DataContext。在班级层面,如下所示:C# 数据库服务器太忙。需要关于打开数据上下文的建议,c#,database,sql-server-2008,class-design,datacontext,C#,Database,Sql Server 2008,Class Design,Datacontext,我昨天开始运行这个庞大的系统。成千上万的人同时连接。。我正在使用SQLServer2008和.NET3.5C 今天我注意到我的db服务器变得非常慢,顺便说一句,服务器机器能够轻松处理10倍于此的应用程序,所以我一定是把我的连接搞砸了 首先:我的业务类每个只创建一个DataContext。在班级层面,如下所示: public class BusProduct : IDisposable { //DataContext DBDataContext db = new DBDataCon
public class BusProduct : IDisposable
{
//DataContext
DBDataContext db = new DBDataContext();
//Variable of type DAL.Products (that will be set on application level)
public Products _attributes { get; set; }
//Dispose
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
}
/// Constructor
public BusProduct()
{
try
{
//New object
_attributes = new Product();
}
catch (Exception ex)
{
throw new Exception(ex.Message,ex);
}
}
public void Insert()
{
try
{
//Insert data set on _attributes
db.Products.InsertOnSubmit(_attributes);
db.SubmitChanges();
}
catch (Exception ex)
{
throw new Exception(ex.Message,ex);
}
}
}
你们觉得每个类一个DataContext怎么样?你有什么建议?它适合大型课程吗?它甚至好吗
我喜欢这样做主要是因为像IQueryable这样的回报。当尝试访问这种返回时,如果我对每个方法使用一个DataContext,它将被释放
你们觉得每个类一个DataContext怎么样
您所做的在很多级别上都是错误的,这一点都不好玩——例如,如何在一个事务中同步多个类的更新?仅仅因为您不关心正确的连接处理,就有200个更新的分布式事务?这个很贵。如何处理多个类之间的连接和项目?您强制每个类使用不同的数据上下文,这将导致底层提供者完全无法进行优化——这并不是说在技术上是不可能的,但我相信,当被问到为什么它不处理这些内容时,开发人员会告诉您适当地起诉这些内容
这将需要完全重写才能进入一个合理的方法——在页面开始时打开连接,在页面结束时关闭连接。嗯,如果需要单独的数据库事务,有时不止一个,但通常-不
另外,还可以买一本关于存储库模式的入门书。我们通过数据管理器运行所有数据库访问
DataManager包含连接,实现类似填充的实体,该实体是IQueryable。在开始时打开一个,根据需要使用它,完成。+1点。如果这是一个web应用程序,请为每个请求打开一个DataContext。这可能会帮助您开始创建通用存储库。不要忘记,像这样的系统需要真正知道如何为性能和优化查询设计数据库的人。我想说的是,可能存在比连接问题更多的错误。也许它在上线之前应该进行负载测试?如果你计划一个大型系统,有数千个用户同时访问一个数据库,为什么不雇佣一个数据库专家来设计你的数据库和查询?大型高性能数据库领域一个需要多年经验的专业,应用程序程序员创建性能良好的数据库的几率几乎为零。