C# Windows 7上的低LINQ性能

C# Windows 7上的低LINQ性能,c#,linq-to-sql,windows-7,sql-server-express,C#,Linq To Sql,Windows 7,Sql Server Express,我有一个.net 3.5应用程序在Windows XP x86 dualcore上运行。 我现在已经在Windows7x64上安装了这个应用程序,它是带有超线程的四核。 该应用程序是一个gui,它通过WCF与windows服务进行通信,windows服务通过Linq2Sql与SQLExpress 2008 R2进行通信。 我们还使用Windsor Castle进行依赖注入/IoC XP环境中的某个Linq2Sql语句大约需要1,5-2秒。在Windows7中,此操作大约需要5-7秒。我已经运行了

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

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

我尝试了以下方法:

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

我的理论是有些东西超时了,但是什么

我认为您必须慢慢添加代码才能找到问题所在-分而治之

如果需要花费时间的是对数据库的实际请求,那么这实际上与Win 7 vs Win XP上的应用程序无关。当直接对数据库启动查询时,该查询的速度有多快?如果速度很快,请向上移动调用堆栈

Windows服务的速度有多快?你能向它提出请求,看看它有多快吗

WCF层的速度有多快?你能直接击中它并看到它慢吗?那么你已经找到了罪魁祸首

接下来,在你的UI上——如果你制作一个小的测试应用程序来测试应用程序的底部,速度会慢吗?如果没有,继续前进


最后,通过自上而下添加日志语句,可以很容易地实现其中一些功能,因此您可以隔离问题,就像@Jan

在将目标平台设置为x86而不是程序按预期运行的任何CPU时所建议的那样。所以问题似乎是Linq2Sql和x64并没有真正协同工作。我不知道我们是否可以把它当作bug,但它的行为无论如何都不好。

有问题的LINQ语句是什么?您必须隔离花费时间的代码。将日志语句添加到一些重要位置,以查看其挂起的位置。您是否尝试过编译查询?所讨论的查询是一个非常简单的select where id=我添加了日志,它表明对数据库的实际请求需要时间。我没有尝试过编译查询,但如果在XP上可以,我不明白为什么在Win上需要它7@Manatherin:我卸载了防病毒软件(带有防火墙),然后禁用了windows中的防火墙。所以,不……我做了大部分,我得出结论,所有的时间都在对数据库的请求中。数据库中查询的SQL分析表明,执行查询不会超过1秒。在数据库的CPU图中还可以看到,在收到响应之前,CPU会上升约1秒。您可以使用SQL Profiler查看在应用程序中体验的“挂起”期间数据库服务器上发生的情况吗?可能Win 7的连接或通信方式与Win XP不同。如果我运行SQL Profiler,我可以在Windows 7上看到4秒的总安静时间,但在Windows XP上不会出现这种情况。我还测试了在WindowsXP上使用数据库(使用相同的数据),行为也一样。如果我在XP-XP上运行应用程序,无需等待,如果我运行Win7 XP,其行为与Win7-Win7相同。因此,它得出的结论不是数据库本身,而是数据库和应用程序之间的某个地方。在Windows7上有一些东西抢走了时间……我还尝试用相同的数据库创建一个新的linq项目,但我无法在那里重现问题。因此,它可能在代码中,现在我怀疑Castle Windsor,因为我以前在Windows 7上遇到过问题。当应用程序在调试器中时,您能重新处理此问题吗?由于您有4秒的延迟,您可以通过在延迟期间单击“暂停”来找到它。