【问题标题】:Entity framework, how to increase limits?实体框架,如何增加限制?
【发布时间】:2012-11-21 13:17:06
【问题描述】:

我们正在构建一个应用程序,该应用程序每周都会同时对数据库发出大量请求。

我们有大约 15-20 个线程同时查询数据库。

我们实际上遇到了很多问题:

在数据库方面(内存不足):正在解决。

但在客户端也是如此。尝试获取连接或执行命令时出现异常。这些命令是通过实体框架制作的。

该应用程序有两部分:一个网站和一个控制台应用程序。

那么谁能告诉我如何增加以下值?

  • 连接超时
  • 命令超时
  • 连接池大小

我认为有几件事必须在服务器端(SQL Server 或 IIS)完成,但我找不到在哪里?

【问题讨论】:

标签: sql-server sql-server-2008 entity-framework database-connection connection-pooling


【解决方案1】:

Command timeout 可以在 ObjectContext 实例上设置。连接超时和连接池大小为configured in connection string,但如果您只有 15-20 个线程,您的问题很可能出在其他地方,因为默认连接池大小为 100。

【讨论】:

  • 是的,所有线程都有几个打开的连接,并且由于当前数据库必须交换硬盘上的一些数据,所以对服务器的一些请求变得非常慢(使它们拥有一个打开的池更长)
  • 问题主要是我们的应用程序是为非常高的多线程设计的(客户要求),而我们的测试服务器没有这些资源。无论如何,谢谢你的帮助
【解决方案2】:

将您的 objectContext 包含在 using 块中,以便在您完成工作后释放上下文。

您可以创建一个方法来传递线程,该线程使用您的实体上下文来完成您想要的工作,然后在工作完成后释放连接,您可以使用 stateinfo 对象变量传递不同的参数以在运行期间使用方法的生命。

void DoContextWork(object stateInfo)
    {

    // wrap your context in a using clause
    using(var objectContext = new YourEntity()
       {
           // Do work here
       }

    }

您可以让多个线程调用此方法,并且每次调用您的连接时,您都可以在数据库上执行您的工作,而不会遇到上述问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多