繁体   English   中英

我应该担心使用ado.net在asp.net中打开和关闭太多连接吗?

[英]Should I worry about opening and closing too many connections in asp.net using ado.net?

使用ado.net时,我是否应该担心打开和关闭太多连接?

例如,假设我有一个MVC控制器方法,该方法调用3个独立的存储库来填充所有需要的对象。

 public ActionResult()
 {
      var codesRepository = new CodesRepository();
      viewModel.codes = codesRepository.GetCodesByName("D");

      var employeeRepository = new EmployeeRepository();
      viewModel.employees = employeeRepository.GetByName("Thomas");

      var companyRepository = new CompanyRepository();
      viewModel.company = companyRepository.GetById(20);

      //.... rest of code
 }

在上面的每个GetBy方法中,我都在打开和关闭连接。

using(var connection = DbFactory.GetConnection('SQLBase') 
{
    // code to fill the objects.
}

我是否需要担心这种方法是否为每个调用的方法打开并设置一个连接? 在我看来,所有3个都应使用相同的连接?

我已经阅读了一些有关连接池的知识。 那是数据库的特定功能,还是ado.net中的功能?

是的,您应该-主要是因为您的设计是反模式。 尽管对读取的性能影响很小,但是您完全破坏了事务完整性或写入/更新方面的性能。

关键是-为了在多个存储库中进行更新,那么您需要DTC(慢速)或按存储库进行存储,这没有事务完整性。

对于任何交叉引用实体的选择操作,Yo也非常慢。 而您将面临一场维护噩梦。

companyRepository.GetById(20);

应该

repository.Element<Company>.Where (x => x.id=20);

这种方法将使您能够:

  • 对所有内容使用一个存储库。
  • 灵活使用Company,包括联接操作和子选择
  • 不带DTC的事务中的所有更新使用具有一个连接的一个存储库。

现在,您的问题不只是开放,而是更新和事务。

这是Entity Framework等所使用的一种方法。-如果您想要原始性能,可以使用BlToolkit。

ADO.NET自动使用连接池,因此您不必担心。

因此,如果您打开与数据库的多个连接,它将通过将它们合并为一个连接来优化连接。

基本上,您不必担心:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM