我在使用EF 3.5时,页面上的一个查询至少需要半秒钟才能执行。当我使用存储过程时,速度明显更快。这是一个非常复杂的查询。在即将推出的EF 4.0中,会有任何性能改进吗?EF 4.0在性能方面真的比3.5更好吗?
我在使用EF 3.5时,页面上的一个查询至少需要半秒钟才能执行。当我使用存储过程时,速度明显更快。这是一个非常复杂的查询。在即将推出的EF 4.0中,会有任何性能改进吗?EF 4.0在性能方面真的比3.5更好吗?
来自ADO.NET博客:
自定义查询 - 添加对现有LINQ运算符的支持,识别更多的模式与LINQ一起编写模型定义函数以及使用这些函数的能力,以及创建和自定义查询的其他方式。
SQL生成可读性改进 - 改进生成的查询的可读性以及TSQL性能优化,使其更容易理解正在发生的事情。
因此,这两个要点意味着您可以看到它如何从LINQ生成查询的改进。
然而,ORM很难超越您从头开始编写的查询,因为它必须适应许多不同的情况,并且通常默认为最常见的情况。当我使用EF 3.5时,它似乎产生了一些非常有效的联接SQL,可能是我从ORM中看到的最好的结果,因此您可以希望在4.0中放弃SP。
如果你有一个存储过程,我猜它是一个大查询 - 每次将这个 SQL 文本发送到服务器会导致大量的网络流量,这可能是你考虑或没考虑过的另一件事。显然,在同一台服务器或内部网络中,这是一种“削发减肥”的优化风格。当涉及到非常复杂的查询时,我没有看到任何证据表明L2S、NH或EF可以生成比我在存储过程中编写的更好的查询计划。我喜欢ORM(尤其是NH),但仍然有时候存储过程的执行时间可以击败ORM。