我有一个 .net 3.5 应用程序在 Windows XP x86 双核上运行。 我现在已经在 windows 7 x64,四核超线程上安装了应用程序。 该应用程序是一个 gui,它通过 WCF 与 Windows 服务进行通信,该 Windows 服务通过 Linq2Sql 与 SQLExpress 2008 R2 进行通信。 我们还使用温莎城堡进行依赖注入(inject)/IoC
XP 环境中的某个 Linq2Sql 语句大约需要 1,5-2 秒。在 Windows 7 中,这条语句大约需要 5-7 秒。我已经运行了 sql 分析器和资源监视器,应用程序似乎等待了大约 5 秒,然后触发了实际的 sql 查询。所以延迟似乎发生在我的 Datacontext 之下和数据库之前
我尝试了以下方法:
- 将连接字符串更改为 sql 身份验证
- 拔掉网线
- 卸载防病毒程序
- 禁用 LLMNR
- 移除网卡上的 IPv6
- 在代码中添加了未提交读取的事务范围
- 尝试加锁(多线程环境)
- 试图将应用程序固定到一个 CPU 上
- 以管理员身份运行
我的理论是有些东西超时了,但是什么?!?
最佳答案
我认为您将不得不慢慢添加代码以找到问题 - 分而治之。
如果是对数据库的实际请求占用了时间,那么这实际上与您在 Win 7 和 Win XP 上的应用程序无关。当直接针对数据库触发此查询时,该查询需要多快?如果这很快,请向上移动调用堆栈...
Windows 服务有多快?你能向它发出请求,看看它有多快吗?
WCF 层有多快?能不能直接打一下看慢不?那么您找到了罪魁祸首。
接下来,关于您的 UI - 如果您制作一个测试应用程序底部的小测试应用程序,它会很慢吗?如果没有,请继续向上移动。
最后,其中一些可以通过从上到下添加日志语句轻松完成,因此您可以隔离问题,就像@Jan 所建议的那样
关于c# - Windows 7 上的 LINQ 性能较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7485819/