Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库服务器太忙。需要关于打开数据上下文的建议_C#_Database_Sql Server 2008_Class Design_Datacontext - Fatal编程技术网

C# 数据库服务器太忙。需要关于打开数据上下文的建议

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

我昨天开始运行这个庞大的系统。成千上万的人同时连接。。我正在使用SQLServer2008和.NET3.5C

今天我注意到我的db服务器变得非常慢,顺便说一句,服务器机器能够轻松处理10倍于此的应用程序,所以我一定是把我的连接搞砸了

首先:我的业务类每个只创建一个DataContext。在班级层面,如下所示:

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。这可能会帮助您开始创建通用存储库。不要忘记,像这样的系统需要真正知道如何为性能和优化查询设计数据库的人。我想说的是,可能存在比连接问题更多的错误。也许它在上线之前应该进行负载测试?如果你计划一个大型系统,有数千个用户同时访问一个数据库,为什么不雇佣一个数据库专家来设计你的数据库和查询?大型高性能数据库领域一个需要多年经验的专业,应用程序程序员创建性能良好的数据库的几率几乎为零。