【问题标题】:Is it possible to limit number of connections used by Entity Framework?是否可以限制实体框架使用的连接数?
【发布时间】:2012-08-21 14:46:22
【问题描述】:

我注意到,在我们托管的 NopCommerce 网站(使用实体框架)上,如果我在网站上运行爬虫(检查损坏的链接),它会使整个网络服务器脱机几分钟,并且没有其他托管网站回应。这似乎是因为 Entity Framework 正在打开 30 多个数据库连接并每秒运行数百个查询(每个页面视图大约 20-40 个)。

我无法更改 NopCommerce 使用 EF 的方式(需要数周时间)或更改正在使用的 EF 版本,所以我可以通过限制它使用的并发连接数来减轻它对 SQL Server 的影响,以提供其他托管在同一台服务器上的网站访问数据库的机会更大?

我最理想的做法是将特定应用程序的并发数据库连接数限制在 10 个左右。

【问题讨论】:

  • 实体框架本身不管理多个并发连接。如果您将其指向一个连接字符串,那么它将为每个上下文实例创建一个连接(或者如果您使用 ADO.NET 连接池,默认情况下是从池中获取),并在释放上下文时释放该连接。您可以通过自己管理连接并在创建连接时将连接传递给上下文实例来在应用程序中更改此设置。这样做是应用程序架构必须支持的;这不是 EF 控制的东西。

标签: sql-server entity-framework entity-framework-4 nopcommerce


【解决方案1】:

我认为你能做的最好的就是在连接字符串中使用Max Pool Size 设置。这限制了连接池中的最大连接数,我认为这意味着这是应用程序将使用的最大连接数。我不确定的是,如果它无法从池中获得连接,是否会导致异常。我从未尝试过以这种方式限制连接。

以下是关于可以放入 ADO.NET 连接字符串中的设置的一点读物:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring%28v=vs.100%29.aspx

这里有更多关于“使用连接池”的阅读:

http://msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.100%29.aspx

【讨论】:

  • 谢谢,我尝试在我的连接字符串中添加“Max Pool Size=10”,但它似乎仍然使用了大约 40 个连接:(
  • 最大池大小设置不限制创建的连接。它只限制每个池的连接。到目前为止,您唯一能做的就是在打开连接之前使用 Semaphore。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
相关资源
最近更新 更多