我的编程空间,编程开发者的网络收藏夹
学习永远不晚

EF Core如何通过显式编译提高查询性能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

EF Core如何通过显式编译提高查询性能

这篇文章主要讲解了“EF Core如何通过显式编译提高查询性能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“EF Core如何通过显式编译提高查询性能”吧!

在介绍具体内容之前,需要说明一点,EF Core已经对表达式的编译使用了缓存;当您的代码需要重用以前执行的查询时,EF Core将使用哈希查找并从缓存中返回已编译的查询。

不过,您可能希望直接对查询进行编译,跳过哈希的计算和缓存查找。我们可以通过在EF静态类中下面两个方法来实现:

  • EF.CompileQuery()

  • EF.CompileAsyncQuery()

这些方法允许您定义一个已编译的查询,然后通过调用一个委托调用它。

为了避免因为数据库查询产生测试结果的差异,我们这里使用内存数据库,它开销更小,同时也可以避免数据库优化执行计划以及缓存所带来的问题。

实体定义以前数据库DbContext

定义实体

在这我们定义一个Category实体类型,非常简单,只有两个属性。

    public class Category    {        public Guid Id { get; set; }        public string Name { get; set; }    }

数据库DbContext

FillCategories方法中,将内存数据库中增加三条记录。

    public class TestDbContext : DbContext    {        public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)        {        }        public DbSet<Category> Categories { get; set; }        public void FillCategories()        {            var foodCategory = new Category {                Id = Guid.NewGuid(),                Name = "Food"            };            Categories.AddRange(foodCategory, new Category {                Id = Guid.NewGuid(),                Name = "Drinks"            }, new Category {                Id = Guid.NewGuid(),                Name = "Clothing"            }, new Category {                Id = Guid.NewGuid(),                Name = "Electronis"            });            SaveChanges(true);        }    }

测试代码

    public class CompileQueryTest    {        private   Func<TestDbContext, Guid, Category> _getCategory =            EF.CompileQuery((TestDbContext context, Guid id) => context.Categories.FirstOrDefault(c => c.Id == id));        private readonly TestDbContext _dbContext;        public CompileQueryTest()        {            var options = new DbContextOptionsBuilder<TestDbContext>().UseInMemoryDatabase(Guid.NewGuid().ToString()).Options;            var context = new TestDbContext(options);            context.FillCategories();            _dbContext = context;        }        private readonly Guid _queryId = Guid.NewGuid();        [Benchmark]        public void CompiledQuery()        {            _ = _getCategory(_dbContext, _queryId);        }        [Benchmark]        public void UnCompiledQuery()        {            _ = _dbContext.Categories.FirstOrDefault(c => c.Id == _queryId);        }    }

为了更加接近测试结果,我们在构造函数中创建TestDbContext对象以及填充数据库。

测试结果

我们使用Benchmark.Net进行基准测试,测试结果如下:

MethodMeanErrorStdDev
CompiledQuery10.59 us0.0580 us0.0543 us
UnCompiledQuery79.55 us0.7860 us0.7353 us

感谢各位的阅读,以上就是“EF Core如何通过显式编译提高查询性能”的内容了,经过本文的学习后,相信大家对EF Core如何通过显式编译提高查询性能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

EF Core如何通过显式编译提高查询性能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

EF Core如何通过显式编译提高查询性能

这篇文章主要讲解了“EF Core如何通过显式编译提高查询性能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“EF Core如何通过显式编译提高查询性能”吧!在介绍具体内容之前,需要说明一点,
2023-06-29

如何通过调优SQL查询以提高Hadoop性能

调优SQL查询可以显著提高Hadoop的性能。以下是一些可以帮助优化SQL查询的方法:确保正确使用索引:在Hadoop中使用索引可以帮助加快查询速度。确保表中的列上有适当的索引,以便在查询时可以快速定位数据。使用分区和分桶:将大表分割成更小
如何通过调优SQL查询以提高Hadoop性能
2024-04-09

PHP8如何通过JIT编译提升Web应用的性能?

PHP8如何通过JIT编译提升Web应用的性能?随着Web应用的不断发展和需求的增加,提升Web应用的性能成为了开发者关注的焦点之一。PHP作为一种常用的服务器端脚本语言,一直以来都备受开发者喜爱。而PHP8中引入了JIT(即时编译)编译器
2023-10-22

如何通过Oracle 函数索引提升查询性能

通过Oracle函数索引提升查询性能,主要涉及到创建和使用函数索引。以下是一些关键步骤和注意事项:确定需要创建函数索引的列:首先,你需要确定哪些列上的函数调用频繁,且这些函数的返回值对查询性能有重要影响。这些列就是潜在的需要创建函数索引的列
如何通过Oracle 函数索引提升查询性能
2024-10-09

如何通过代码审查提高 PHP 函数性能?

代码审查是提升 php 函数性能的关键步骤,通过检查代码寻找复杂性、优化数据库查询、避免内存泄漏、优化缩容时间以及利用缓存等措施,可以有效提高应用程序效率。以 get_products() 函数为例,通过优化查询、批量获取数据和改进分层结构
如何通过代码审查提高 PHP 函数性能?
2024-04-24

如何通过索引提升PHP与MySQL的多语言查询和高性能排序?

在开发多语言网站时,经常需要进行多语言查询和排序操作。而PHP和MySQL是常用的开发语言和数据库,如何通过索引提升多语言查询和高性能排序成为了一个关键问题。本文将通过具体代码示例介绍如何优化和加速这些操作。使用合适的字符集和校对规则在My
2023-10-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录