【问题标题】:Slow LINQ performance on Windows 7Windows 7 上缓慢的 LINQ 性能
【发布时间】:2011-09-20 13:19:52
【问题描述】:

我有一个在 Windows XP x86 双核上运行的 .net 3.5 应用程序。 我现在已经在 Windows 7 x64、超线程四核上安装了该应用程序。 该应用程序是一个通过 WCF 与 Windows 服务通信的 gui,该服务通过 Linq2Sql 与 SQLExpress 2008 R2 通信。 我们还使用 Windsor Castle 进行依赖注入/IoC

XP 环境中的某个 Linq2Sql 语句大约需要 1,5-2 秒。在 Windows 7 中,此语句大约需要 5-7 秒。我已经运行了 sql profiler 和资源监视器,似乎应用程序等待了大约 5 秒,然后触发了实际的 sql-query。所以延迟似乎发生在我的 Datacontext 下面和数据库之前

我尝试了以下方法:

  • 将连接字符串改为sql认证
  • 拔掉网线
  • 已卸载防病毒程序
  • 已禁用 LLMNR
  • 删除了网卡上的 IPv6
  • 在代码中添加了未提交读取的事务范围
  • 尝试加锁(多线程环境)
  • 试图将应用程序固定到一个 cpu
  • 以管理员身份运行

我的理论是某些事情正在超时,但是什么?!?

【问题讨论】:

  • 有问题的 LINQ 语句是什么?
  • 您必须隔离花费您时间的代码。将日志语句添加到一些战略位置,以查看其挂起的位置。
  • 你试过编译查询吗?
  • 有问题的查询是一个非常简单的选择,其中 id= 我添加了日志记录,它表明它是对数据库的实际请求需要时间。我没有尝试编译查询,但如果在 XP 上没问题,我不明白为什么在 Win 7 上需要它
  • @Manatherin:我卸载了防病毒软件(带防火墙),然后 Windows 中的防火墙被禁用。所以,不...

标签: c# linq-to-sql windows-7 sql-server-express


【解决方案1】:

我认为您将不得不慢慢添加代码才能找到问题 - 分而治之。

如果花费时间的是对数据库的实际请求,那么这实际上与您在 Win 7 和 Win XP 上的应用程序无关。直接针对数据库触发此查询需要多快?如果这很快,请向上移动调用堆栈...

Windows 服务有多快?你可以向它提出请求,看看它有多快?

WCF 层有多快?能不能直接打,看慢?那么你就找到了罪魁祸首。

接下来,关于您的 UI - 如果您制作一个测试应用程序底部的小测试应用程序会不会很慢?如果没有,请继续前进。

最后,其中一些可以通过从上到下添加日志语句轻松完成,因此您可以隔离问题,就像@Jan 建议的那样

【讨论】:

  • 我做了大部分工作,我得出的结论是,所有时间都放在对数据库的请求上。数据库中查询的 SQL 分析表明,该查询的执行时间不会超过一秒。在数据库的 CPU 图中还可以看到,它在收到响应前大约一秒上升
  • 您能否使用 SQL Profiler 查看您在 App 中遇到的“挂起”期间数据库服务器上发生的情况?也许 Win 7 的连接或通信方式与 Win XP 不同。
  • 如果我运行 SQL Profiler,我可以在 Windows 7 上看到 4 秒的完全安静,而这在 Windows XP 上不会出现。我还测试了在 Windows XP 上使用数据库(具有相同的数据)并且行为是相同的。如果我在 XP-XP 上运行应用程序无需等待,如果我运行 Win7-XP 与 Win7-Win7 相同的行为。所以它得出的结论不是数据库本身,而是数据库和应用程序之间的某个地方。 Windows 7 上有些东西会占用时间...
  • 我也尝试使用相同的数据库创建一个新的 linq 项目,但我无法重现那里的问题。所以它可能在代码中,现在我怀疑 Castle Windsor,因为我之前在 Windows 7 上遇到过问题
  • 您能否在您的应用程序处于调试器中时重现此问题?由于您有 4 秒的延迟,因此您只需在延迟期间单击暂停即可找到它。
【解决方案2】:

当将目标平台设置为 x86 而不是 AnyCPU 时,程序会按预期运行。所以问题似乎是Linq2Sql和x64并没有真正一起玩。我不知道我们是否可以将其视为错误,但无论如何它的行为都很糟糕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多