【问题标题】:Linq to SQL and Realtime DataLinq to SQL 和实时数据
【发布时间】:2010-06-05 08:17:12
【问题描述】:

我有一个应用程序需要不断(每 50 毫秒)调用 MVC 操作并拾取/丢弃数据。

我使用 Linq to SQL 和 MVC 是因为它们实现起来非常简单,而且我知道它们在性能方面并不完美,但它的效果相对较好,但我能获得的最佳速度是我的当前的方法是 200 毫秒(没有请求重叠)。

对站点的每次调用都会创建一个新的数据上下文实例,查询/插入它并返回该数据。

有没有办法让数据上下文保持静态,但每 5 秒提交一次更改,所以我几乎可以访问内存中的数据版本?

编辑:

我构建了一个完全断开的架构,其中包含我的上下文的所有相同属性和对象,我在 application_start() 上静态声明该对象,并且在每个 X 请求上,都会旋转一个线程来附加所有断开连接的对象并存储到数据库中。

这成功地将我的往返时间减少到只有 100 毫秒,这是一个很大的改进,但它仍然缺乏“实时”所需的内容

我正在达到微优化的水平,但我似乎无法更快地推动它。

【问题讨论】:

    标签: c# asp.net-mvc linq-to-sql datacontext


    【解决方案1】:

    DataContext 意味着每次访问数据库时都会创建。这不应该是瓶颈。

    如果您担心创建昂贵的数据库连接,那可能不是问题。有一个小的连接轮询,因此连接被后续调用重用。

    您可以做些什么来提高性能(我现在还没有听说过它很差)是用存储过程替换自动生成的 SQL。您将节省一点重新创建执行计划的时间。

    【讨论】:

      【解决方案2】:

      CompiledQuery 可能有助于提高性能。但它永远不会比经典的 ADO.NET 更快。如果性能是主要关注点,那么任何 ORM 都是非常糟糕的选择。

      您可以随时混合使用它们(Linq2SQL + ADO.NET)以获得最佳性能。

      【讨论】:

        【解决方案3】:

        我不认为创建 LINQ 上下文/查询是您的瓶颈。使用它有一点点开销(就像任何 ORM 一样),但它对您来说并不重要,除非您正在创建大量上下文和复杂的查询树。

        我的猜测可能是 LINQ 没有生成您期望的查询。如果您不小心,它实际上可能会生成一堆查询,并尝试从多个表中获取。如果你想知道它正在运行什么查询,你可以使用

        context.Log = Console.Out; // Or some other stream
        

        您也可以使用出色的LINQPad 来尝试您的查询。如果这不是问题,您应该使用分析器分析您的代码,我个人喜欢dotTrace

        【讨论】:

          猜你喜欢
          • 2011-01-11
          • 1970-01-01
          • 2011-02-19
          • 1970-01-01
          • 2010-10-31
          • 2011-01-15
          • 2011-04-27
          • 1970-01-01
          • 2011-11-18
          相关资源
          最近更新 更多