【问题标题】:linq to sql vs ado.net - performance in terms of connection being openlinq to sql vs ado.net - 在连接打开方面的性能
【发布时间】:2012-11-20 07:48:50
【问题描述】:

我必须从一个表(大约 40 列)中获取记录,处理每条记录,在该记录上调用一个 Web 服务,等待它的响应并将记录更新到数据库。

现在,我看到了 2 个选项。
1. Linq to Sql
2. 带类型数据集的 ADO.Net
(对于我必须做的所有额外工作,我保留了 DataReader 的选项。)

2 获取数据后立即关闭连接,我可以离线处理数据并稍后提交更改,即我没有保持连接打开这么长时间。使用 1,为了能够在最后提交更改,我必须始终保持连接打开。

您是否认为 2 在经过一段时间的处理后需要提交更改时总是最好的方式,或者我错过了什么?

【问题讨论】:

  • 我知道这是旧的,但因为你仍然活跃;我将重申 Jim 在下面的回答中提到的内容:L2S 确实按照您的建议保持您的连接打开。它在加载对象后立即关闭,并在您保存更改时重新打开。 Entity Framework 同样做同样的事情。

标签: linq-to-sql ado.net


【解决方案1】:

在您处理获取的对象时,Linq to SQL 或 Entity Framework 都不会保持连接打开。如果您想利用各种上下文的更改跟踪功能,则需要将上下文对象保持在范围内,但这并不意味着与数据库的连接在此期间保持打开状态。实际上,连接仅在您迭代结果(数据绑定)和调用 SubmitChanges/SaveChanges 时打开。否则连接关闭。

这些技术在后台使用 ADO.Net DataReaders 和命令对象。仍然没有像 VB6 时代那样开放游标的概念。

【讨论】:

    【解决方案2】:

    L2S 或实体框架会带来一些开销,但老实说,您节省的时间非常值得,而且每当您对对象执行 Linq 查询时,SQL 都会为您优化。

    普通的旧 ADO.Net 是老派 - Linq 是现在要走的路。

    【讨论】:

    • 我实际上并不担心生成 sql 和优化所涉及的开销。 L2S 和 ADO.Net 都在类型化类列表中为我提供数据,并为我处理更新和插入。我不知道我在这里节省了多少时间。我要分析的是连接打开了一段时间还是没有打开? (我不确定连接打开时后台到底发生了什么,它消耗了多少资源,它在 sql server 上的负载有多大。)
    • L2S 和 L2E 在后台为您使用 SQLConnection,并在您每次与 DataContext 交互时打开和关闭连接。您不需要管理打开和关闭连接对象。并且编码得到了简化,因为您可以使用干净的 Linq 语句来检索域对象并立即开始使用它们的属性 - 无需创建对象并从数据集中填充它,反之亦然,当您将数据保存回 SQL Server 时.
    • 一年前我开始编程,出于无知而使用 ADO.NET。一旦我发现了 LINQ,我就非常高兴……
    • @Nick 是的,对于阅读本文的任何人,如果您还没有尝试过 Linq,只需学习其中一个教程,您就会被它的清洁程度所震撼;)
    • 使用 sqlDataAdaptor、sqlDataReader 等让我很困惑。我永远不会回去!
    【解决方案3】:

    普通的旧 ADO.Net 是老派 - Linq 是现在要走的路。

    微软迎合新手并将自己作为“爱好者”语言推销给大众。

    LINQ 允许开发人员查询没有业务访问数据源的数据源。

    拥有深厚的知识和足够的大脑来编写自己优化的 T-SQL 或许是一项令人向往的技能,而不是像“老派”那样可笑。

    作为一名软件工程师,一个人应该朝着编写能够尽可能高效和快速运行的软件的方向前进。选择更高级别的构造的整个“节省开发时间”的论点,因为它实现起来太简单了,这说明如果与高级工程师版本堆叠在一起,程序将执行多么糟糕。

    不要被那些让编码“更快”的最新最好的产品推销。如果您足够聪明,可以自己做,那就自己做,避免让 LINQ 语法为您编写 T-SQL。

    在商业世界中,有一个衡量微秒数的尺度,当您的软件需要以您知道如何制作的速度运行时,作为对公司而言有价值的商品,您的深厚知识将经受考验。

    简而言之,拥有深厚的知识永远不会过时。

    【讨论】:

    • 哈哈,你只是做了同样的事情。你也没有回复帖子。我要离开边锋的职位。因此,他引用了旧学校。你自己听起来像个新手。
    • 此外,如果您可以将 2 和 2 加在一起,我确实回答了这个问题。我说要自己写 T-SQL,它...把两根棍子擦在一起,推断出它的意思是 ADO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多