使用一个或多个上下文是否更好

时间:2017-09-12 18:36:04

标签: c# sql-server entity-framework

我们有一个应用程序有3个上下文连接到同一服务器下的3个SQL Server数据库。

我们的DBA认为这三个连接对服务器来说代价很高。

我的问题是:这是真的吗?三个连接比一个连接更昂贵吗?我该如何衡量呢?

在实体框架上处理此问题的最佳做法是什么?

此外,我们正在访问三个数据库,而我们的DBA正在争论我们正在进行三个连接。是巧合还是每个背景真的对应不同的连接?

1 个答案:

答案 0 :(得分:2)

引擎盖下的实体框架使用ADO.Net Connection Pooling

摘录:

  

连接池减少了必须打开新连接的次数。 pooler保持物理连接的所有权。它通过为每个给定的连接配置保持一组活动连接来管理连接。每当用户在连接上调用Open时,pooler将在池中查找可用连接。如果池连接可用,则将其返回给调用者,而不是打开新连接。当应用程序在连接上调用Close时,pooler会将其返回到池化的活动连接集,而不是关闭它。一旦连接返回到池,就可以在下一个Open调用中重用它。

     

池连接可以显着提高应用程序的性能和可伸缩性。默认情况下,在ADO.NET中启用连接池。除非您明确禁用它,否则在您的应用程序中打开和关闭连接时,池会优化连接。您还可以提供多个连接字符串修饰符来控制连接池行为。有关详细信息,请参阅本主题后面的“使用连接字符串关键字控制连接池”。

  

我们的DBA认为这三个连接对服务器来说代价很高。

他需要定义昂贵的。如果你需要3个连接,你需要三个连接,你不能只是神奇地减少连接数。

  

三个连接的成本是否高于一个?

是。一切都有Pro / Con。如果使用3编写,维护并具有更好的性能更简单,那就不像简单地说3对1那样简单。

  

在实体框架上处理此问题的最佳做法是什么?

我不认为根据你的问题(没有示例上下文,为什么有3个数据库,如果它们同时由同一个客户端同时使用),它可以在你的情况下真正回答。 / p>