Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6查询计划缓存_C#_Performance_Caching_Entity Framework 6 - Fatal编程技术网

C# EF6查询计划缓存

C# EF6查询计划缓存,c#,performance,caching,entity-framework-6,C#,Performance,Caching,Entity Framework 6,查询计划缓存 第一次执行查询时,它会遍历内部计划 编译器将概念查询转换为store命令 (例如,在SQL Server上运行时执行的T-SQL)。如果 查询计划缓存已启用,下次执行查询时 直接从查询计划缓存中检索store命令 执行,绕过计划编译器 查询计划缓存在中的ObjectContext实例之间共享 相同的AppDomain。您不需要保留ObjectContext 实例从查询计划缓存中获益 我使用的是EF6,有一个TPT映射表,第一次尝试从中访问数据需要8到10秒。但之后的连续呼叫只需要几

查询计划缓存

第一次执行查询时,它会遍历内部计划 编译器将概念查询转换为store命令 (例如,在SQL Server上运行时执行的T-SQL)。如果 查询计划缓存已启用,下次执行查询时 直接从查询计划缓存中检索store命令 执行,绕过计划编译器

查询计划缓存在中的ObjectContext实例之间共享 相同的AppDomain。您不需要保留ObjectContext 实例从查询计划缓存中获益

我使用的是EF6,有一个TPT映射表,第一次尝试从中访问数据需要8到10秒。但之后的连续呼叫只需要几毫秒。我的理解是EF商店查询执行计划

1) 执行计划未缓存在EF中时需要5秒。 2) 缓存执行计划时所需的时间不到10毫秒

我的问题是有没有办法手动将执行计划添加到EF


我见过生成预编译视图的方法(使用EF Power Tools生成映射视图),所以我想知道是否有方法在it应用程序启动时将已知的执行计划添加到EF中。

缓存的执行计划不会将您的查询从毫秒变为10秒。谢谢您,David,请你详细阐述一下你的评论,并解释一下。我可能错了,但我的观察是EF生成的TPT层次结构的复杂查询可能有2000行左右大,是否有方法附加一个示例项目并向您解释如果您能回答我的问题,这将是一个很大的帮助。更多细节可以在这里找到。查询计划在数据库中,而不是EF中。您是否将它们与模型存储或本地查询视图混淆了?我是EF新手,可能是错的,但我试图遵循MSDN关于EF 4、5和6性能考虑的指导原则,以及第3.2节查询计划缓存更多关于查询计划缓存的内容,我可能理解错了,因此,您的意思是EF不会缓存查询以备将来使用。查询计划是数据库在向其发送SQL语句时创建的。如果缓存的执行计划无法将查询从毫秒变为10秒,那么您可能会从中获益。谢谢您,David,您的回复,请您尝试详细说明您的评论,并对其进行更多解释。我可能错了,但我的观察是EF生成的TPT层次结构的复杂查询可能有2000行左右大,是否有方法附加一个示例项目并向您解释如果您能回答我的问题,这将是一个很大的帮助。更多细节可以在这里找到。查询计划在数据库中,而不是EF中。您是否将它们与模型存储或本地查询视图混淆了?我是EF新手,可能是错的,但我试图遵循MSDN关于EF 4、5和6性能考虑的指导原则,以及第3.2节查询计划缓存更多关于查询计划缓存的内容,我可能理解错了,因此,您的意思是EF不会缓存查询以备将来使用。查询计划是数据库在向其发送SQL语句时创建的。不过,你可以从中获得一些好处