【发布时间】:2010-06-23 16:58:25
【问题描述】:
我有一个在 .NET 3.5 和 .NET 4 上运行的简单查询,如下所示:
var x = from o in Orders
join ot in OrderTypes on o.OrderTypeId equals ot.OrderTypeId
where or.OrderTypeName.Contains("sales")
select o;
var y = x.ToList();
相同的代码在 .NET 3.5 和 .NET 4 上运行,连接到同一个数据库,两个 dbml 文件均在受尊重的 .NET 版本中生成。两者都返回正确数量的记录(大约 350 条记录)。数据库表索引正确。两者分别在 VS 2008 和 VS 2010 中以调试模式运行。当我直接在 SQL Mgmt Studio 中运行 T-SQL 中的查询时,它运行得很快,几乎是即时的。所以这绝对不是 DB 对象的问题。
问题是:在 .NET 3.5 中运行的运行速度很快(应该是,不到 1 秒,我没有精确的测量,但几乎是即时的)。但是在 .NET 4 中运行的需要超过 5 秒。
有人知道这是为什么吗?还是……帮忙?
【问题讨论】:
-
当您在发布模式下运行此程序时,在 Visual Studio 之外,您是否看到相同的性能差异?
-
我将首先在
Release模式和开发环境之外运行这两个可执行文件。如果你在性能上有如此大的差异,事情就会变得令人担忧:-) -
我同意,这可能是因为 VStudio 2010 比 VStudio 2008 慢,并且您正在运行附加调试器。
-
我没有尝试在 VS 2010 中以发布模式运行 - 我会尝试一下。在 2008 年,我没有看到调试模式和发布模式之间有任何明显的区别。我会在 2010 年尝试时更新。
-
好的,我已经尝试了几件事: 1. 将 web.config 设置为在 debug mode = false 下运行(没有区别) 2. 在 Release 模式下编译整个解决方案并重新运行(大不同 - 它与 .NET 3.5 一样快)。所以,我猜在某种程度上,速度慢只是在调试编译中。但是有人愿意解释为什么在 .NET 3.5 中没有这样的行为?
标签: c# linq performance linq-to-sql