测试EF6.1.3性能

公司原来用nhibernate,现在考虑要不要用EF。所以就产生了测试这两个性能的要求。对比两个ORM工具的性能,主要是对比ORM配置和启动速度;建表速度;插入行速度;修改行速度以及查询速度,删除用的比较少,就不测试了。

测试表结构

    public class School
    {
        public Guid ID { get; set; }
        public string Name { get; set; }
        public int AllPersonCount { get; set; }
    }
    public class Person
    {
        public long ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public virtual School InShool { get; set; }
    }

测试项目

1. 插入10个学校, 学校人数从1递增,名称相同为”SSS”
2. 每个学校插入1000人,年龄从1递增,名字相同”PPP”,并返回ID
3. 查询年龄大于30的人
4. 更新3查询出的人的年龄到当前值加20
5. 查询学校人数大于5的所有人
6. 统计学校人数大于5的所有人的人数

代码原则

1. 尽量简洁
2. 不能使用sql语句

  写测试代码

  nhibernate是由另一个家伙搞,我就写EF的测试代码。首先新建一个控制台应用程序,右键项目管理NuGet添加EF6.1.3。然后新建那两个表对应的类,接着就开始一个个写啦。

  ORM配置及启动

watch.Start();
db = new TestContext();
watch.Stop();
Console.WriteLine("ORM配置及启动:" + watch.ElapsedMilliseconds);

  建表

watch.Restart();
db.Database.Initialize(true);
watch.Stop();
Console.WriteLine("建表:" + watch.ElapsedMilliseconds);

  测试项目1

db.Configuration.AutoDetectChangesEnabled = false;
db.Configuration.ValidateOnSaveEnabled = false;
watch.Restart();

for (int i = 1; i < 11; i++)
{
    db.School.Add(new School
    {
        ID = Guid.NewGuid(),
        Name = "SSS",
        AllPersonCount = i
    });
}

db.SaveChanges();
watch.Stop();
Console.WriteLine("测试项目1:" + watch.ElapsedMilliseconds);

  测试项目2

watch.Restart();
List<School> schools = db.School.ToList();

schools.ForEach(o =>
{
    for (int i = 1; i < 1001; i++)
    {
        db.Person.Add(new Person
        {
            Age = i,
            Name = "PPP",
            InShool = o
        });
    }
});

db.SaveChanges();
watch.Stop();
Console.WriteLine("测试项目2:" + watch.ElapsedMilliseconds);

  测试项目3

db.Configuration.AutoDetectChangesEnabled = true;
watch.Restart();
List<Person> person = db.Person.Where(o => o.Age > 30).ToList();
watch.Stop();
Console.WriteLine("测试项目3:" + watch.ElapsedMilliseconds);

  测试项目4

watch.Restart();
person.ForEach(o => o.Age += 20);
db.SaveChanges();
watch.Stop();
Console.WriteLine("测试项目4:" + watch.ElapsedMilliseconds);

  测试项目5

watch.Restart();
List<Person> students = db.Person.AsNoTracking().Where(o => o.InShool.AllPersonCount > 5).ToList();
watch.Stop();
Console.WriteLine("测试项目5:" + watch.ElapsedMilliseconds);

  测试项目6

watch.Restart();
int count = db.Person.Count(o => o.InShool.AllPersonCount > 5);
watch.Stop();
Console.WriteLine("测试项目6:" + watch.ElapsedMilliseconds);

  这里要说明一下的是测试项目5和6的人数大于5是说学校表的AllPersonCount大于5,而且那个字段并不是真的学生总人数,不会随学生的增加而增加,只是为了测试的。

  运行3次的截图如下:

  需要说明的是数据库是mssql2008,并且程序和数据库都在本机,不同的电脑的性能不一样,数据库不一样也会影响测试的结果,所以大家如果要对比其他ORM工具的话,需要把多个程序在同一个电脑上运行,并且连接同一个数据库。

  示例代码下载

TestEF6.1.3

时间: 2024-08-03 06:39:00

测试EF6.1.3性能的相关文章

PHP 使用Apache 中的ab 测试网站的压力性能

打开Apache服务器的安装路径(我用的是 WampServer),在bin目录中有一个ab.exe的可执行程序,它就是要介绍的压力测试工具. 在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序.注意直接双击无法正确运行. d:(回车/进入D盘) cd wamp\bin\apache\Apache2.4.4\bin(回车/进入 bin目录) ab(回车/) 如果看到下列一些帮助信息就说明成功启动ab     开始启动ab 压力测试 ab -n 5000 -c 20

测试c语言函数调用性能因素之测试二

函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1,               调用函数帧指针(函数参数,局部变量,栈帧状态值,函数返回地址)入栈,栈指针自减 2,               保存调用函数的状态数据入寄存器 3,               被调用函数帧指针入栈,执行当前的被调用函数 4,               被调用函数执行结束,退栈,返回到调用函数的帧指针,从寄存

SQLIO 模拟随机或者顺序的方式来测试磁盘IO的性能

SQLIO 功能:磁盘IO压力测试工具,SQLIO主要是模拟随机或者顺序的方式来测试磁盘IO的性能. SQLIO Disk Subsystem Benchmark Tool工具下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=20163 RAID存储技术在SQL Server服务器上已经被广泛使用,对于存储介质,有很多层面的硬件和固件,以及存储管理软件配置.如果设置不恰当,同样的硬件最后的效能会差别很大. 微软提供了一个工

测试c语言函数调用性能因素

函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1,               调用函数帧指针(函数参数,局部变量,栈帧状态值,函数返回地址)入栈,栈指针自减 2,               保存调用函数的状态数据入寄存器 3,               被调用函数帧指针入栈,执行当前的被调用函数 4,               被调用函数执行结束,退栈,返回到调用函数的帧指针,从寄存

测试c语言函数调用性能因素之测试三

函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1,               调用函数帧指针(函数参数,局部变量,栈帧状态值,函数返回地址)入栈,栈指针自减 2,               保存调用函数的状态数据入寄存器 3,               被调用函数帧指针入栈,执行当前的被调用函数 4,               被调用函数执行结束,退栈,返回到调用函数的帧指针,从寄存

ab工具使用(测试平台的并发性能)简单介绍一下

Apache -- ab工具主要测试网站的(并发性能) 这个工具非常的强大. 基本语法 :   cmd>ab.exe –n 请求总次数  -c 并发数 请求页面的url    进入到ab.exe目录 举例:  cmd>ab.exe –n 10000 –c 100 http://localhost/test.php 简单test结果简单介绍一下: ab工具使用(测试平台的并发性能)简单介绍一下

第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题

一. 开篇说明 EF的性能问题一直以来经常被人所吐槽,究其原因在于“复杂的操作在生成SQL阶段耗时长,且执行效率不高”,但并不是没有办法解决,从EF本身举几个简单的优化例子: ①:如果仅是查询数据,并不对数据进行增.删.改操作,查询数据的时候可以取消状态追踪. db.TestInfor.AsNoTracking().FirstOrDefault(); ②:用什么查什么,比如一张表有100多个字段,本次业务只需要5个字段,一定是select这5个字段,然后toList,而不是全部查询,再toLis

使用fio测试磁盘I/O性能报告

浪潮存储服务器SA5212 I/O基准性能测试报告 1.测试目的 本次测试针对的是浪潮存储服务器SA5212的I/O基准性能,测试维度主要分为磁盘RAID5和RAID10下的读写吞吐量,包括顺序读写,随机读写 2.服务器软硬件环境 系统环境:Centos 7.2 硬件资源:系统盘4*500G SSD,RAID10:存储磁盘12*6T SATA,7200转 3.测试工具 fio - Flexible IO Tester 主要参数说明: filename=/dev/sdb   #测试文件名称,通常选

如何测试一个网站的性能(并发数)?

点击打开链接 JMeter网站并发性测试 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件.Java小服务程序.CGI脚本.Java 对象.数据库, FTP服务器, 等等.JMeter 可以用于对服务器.网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能.另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本