当前位置: 首页 > 编程语言 > C#

什么时候应该使用CompiledQuery?分享

时间:2023-04-11 03:36:30 C#

什么时候用CompiledQuery?我有一张表:--标记ID|名称----------1|#2|linq3|实体框架我有一个类将具有以下方法:IEnumerableGetAll();IEnumerableGetByName();在这种情况下我应该使用编译查询吗?staticreadonlyFuncAllTags=CompiledQuery.Compile(e=>e.Tags);然后我的GetByName方法将是:它生成一个SELECTID、NameFROMTag并在代码上执行Where。或者在这种情况下我应该避免使用CompiledQuery吗?基本上我想知道什么时候应该使用编译查询。另外,在网站上,他们只为整个应用程序编译一次?当以下所有条件都为真时,您应该使用CompiledQuery:CompiledQuery在第一次执行查询时执行其工作。它对第一次执行没有任何好处。与任何性能调整一样,在您确定要修复实际性能热点之前,通常会避免这样做。2012年更新:EF5将自动执行此操作(请参阅“实体框架5:控制自动查询编译”)。因此,将“您没有使用EF5”添加到上面的列表中。编译查询可以节省您生成表达式树所花费的时间。如果您经常使用查询,您绝对应该使用它,并且您将保存已编译的查询。我遇到过很多情况,查询解析比实际往返数据库花费的时间更多。在你的情况下,如果你确定它会生成SELECTID,NameFROMTag而不是WHERE大小写(我怀疑,因为你的AllQueries函数应该返回IQueryable并且实际查询应该只调用ToList)-你不应该使用它。正如有人提到的,在较大的表上,SELECT*FROM[someBigTable]将花费很长时间,并且您将花费更多时间在客户端对其进行过滤。所以无论你是否使用编译查询,你都应该确保在数据库端进行过滤。对于linq查询,编译查询更有帮助,大的表达式树代表复杂的查询,这样复用查询时可以重复构建表达式树的性能。就您而言,我想这会节省很少的时间。编译查询可以提高性能,但提升幅度不大。如果您有复杂的查询,我宁愿使用存储过程或视图,如果可能的话;让数据库来做可能是更好的方法。编译查询是在编译应用程序时编译的,每次重复使用查询频繁或复杂时,都应该尝试编译查询以加快执行速度。但我不会将它用于所有查询,因为它需要编写更多代码,而对于简单的查询,它可能不值得。但为了获得最佳性能,您还应该评估在数据库服务器上执行所有处理的存储过程,即使Linq尝试将尽可能多的工作推送到数据库服务器,您也会遇到存储过程更快的情况。以上是C#学习教程:什么时候用CompiledQuery?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: