Entity Framwork Vs ADO .Net Vs Dapper .Net 效率比较

博主通过对比EF 6.2.0、Dapper 1.50.4和ADO .Net在不同场景下的效率,发现Dapper在查询性能上表现出色,接近ADO .Net的效率。测试包括跟踪和非跟踪查询,以及不同查询接口的实现。虽然Dapper效能高,但由于其不支持ORM的优雅性和后期维护便利性,作者认为在需要长期维护的系统中可能不会频繁使用。
摘要由CSDN通过智能技术生成

由我另一个博客拷贝
近年来一直使用EF+.Net MVC来编写系统,由于最近换了一个公司,碰到一个印度同事,他告诉我用Dapper比用EF高效很多,基本可以接近ADO .Net 的效率,因为习惯的问题一直没有对ORM做深入的了解的解析,所以借此机会对此三种方法进行效率测试,以便今后做大型数据处理时可以有更多的选择性。测试用例借鉴了 here

比较版本

EF 6.2.0, Dapper 1.50.4

数据表结构

这里写图片描述

    public class Sport
    {
        public Sport()
        {
            Teams = new HashSet<Team>();
        }
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public ICollection<Team> Teams { get; set; }
    }
    public class Team
    {
        public Team()
        {
            Players = new HashSet<Player>();
        }
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }

        public DateTime FoundingDate { get; set; }
        [ForeignKey("Sport")]
        public int SportId { get; set; }
        public Sport Sport { get; set; }
        public ICollection<Player> Players { get; set; }
    }
    public class Player
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string  FirstName { get; set; }
        public string  LastName { get; set; }
        public DateTime DateOfBirth { get; set; }
        [ForeignKey("Team")]
        public int TeamId { get; set; }
        public Team Team { get; set; }
    }

数据

Sports表加入47个不同的运动项目,大家可以网上自行搜索后加入,
Teams随即生产1000个Team,并随机分配到Sport
Players随机生成100万个Player,并随机分配到Team
数据库由EF Code First生成,并且使用比较熟悉的EF加入数据

查询Interface.

    public interface ITestORM
    {
        long GetPlayerByID(int id);
        long GetPlayersForTeam(int teamId);
        long GetPlayersForSport(int sportId);
    }

GetPlayerByID: 根据运动员编号(主键)查找运动员
GetPlayersForTeam: 查找给定Team编号的所有运动员
GetPlayersForSport: 查找给定Sport编号的所有运动员
所以方法都不返回查找的结果,只是返回一个tick值(一千万分之一秒)
每个方法运行10次,并且取得平均值和搜寻的总时长进行比较

Entity Framework 实现代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值