介绍

最近一直在使用Petapoco+Entity Framework Core结合开发一套系统。

使用EFCore进行Code First编码,使用PMC命令生成数据库表的信息。

使用Petapoco进行数据库的常规操作。并且结合PetaPoco.SqlKata的使用,减少了编写SQL语句的工作量,对提升开发效率有很大的帮助。Petapoco对数据库的支持非常的全,包括常规的一下数据库:SQL Server,SQL Server CE,MS Access,SQLite,MySQL,MariaDB,PostgreSQL,Firebird DB和Oracle。当然SQL Server为默认的支持。PetaPoco.SqlKata支持的数据库也是非常全的,包括:SqlServer, MySql, Postgres, Firebird, SQLite, Oracle。

## 遇到的问题

在数据库操作过程中,发现每个Controller的Index页面加载的非常缓慢,加载完成大约需要5s的时间,在浏览器端等待的时间相对来说是非常长的一个时间。对于出现的问题终于有时间进行解决一下了。

先来看一下未使用Order By加载页面的耗时情况,第一个图中涉及的表的主键为guid类型,第二个图中涉及的主键为ulong类型,对于不同的主键进行分页查询时也有较大影响。



图一

图二

优化后运行情况

使用Order by加载页面的耗时情况



图三



图四


## 进行验证OrderBy对时间的影响

对出现的问题,使用StopWatch进行监视运行时间的长短,使用了分页的两种方法,区别是否加Order By语句,组成成如下四种情况:

  • PageAsync Order by
  • PageAsync
  • Page Order by
  • Page

代码如下:

Stopwatch stop = new Stopwatch();
stop.Start();
var pages = await _context.PageAsync<productdto>(page, itemsPerPage, "order by id");
stop.Stop();
_logger.Information($" Order By Async查询的执行时间:{stop.Elapsed}");
stop.Restart();
var pages2 = await _context.PageAsync<productdto>(page, itemsPerPage );
stop.Stop();
_logger.Information($"Async查询的执行时间:{stop.Elapsed}");
//_logger.Information($"SQL:{_context.LastSQL}"); stop.Restart();

var ps = _context.Page<productdto>(page, itemsPerPage, "order by id"); stop.Stop();

_logger.Information($"Order By查询的执行时间:{stop.Elapsed}"); stop.Restart();

var ps2 = await _context.PageAsync<productdto>(page, itemsPerPage); stop.Stop();

_logger.Information($"查询的执行时间:{stop.Elapsed}");

stop.Restart(); var x = _mapper.Map<page<productviewmodel>&gt;(pages);

stop.Stop();

_logger.Information($"Mapper的执行时间:{stop.Elapsed}");

结果

运行后台输出的日志信息,可以看到对于是否加Order By对查询耗时的影响是非常大的,对是否使用异步方法对耗时也有部分的影响

Benchmark对Page的性能测试

对于上述的四种情况再次使用Benchmark进行一次性能测试,对使用的数据表的实体类不在列出

namespace PetaPocoPageBenchMark
{
class Program
{
static void Main(string[] args)
{
        var summary = BenchmarkRunner.Run&lt;petapocopage&gt;();
Console.WriteLine("Hello World!");
}
} public class PetapocoPage
{
public static IDatabase Database =&amp;gt;
new Database(DatabaseConfiguration.Build()
.UsingConnectionString(
"server=192.168.88.3;port=3306;uid=root;pwd=biobase;database=BiobaseProductionQrCode;")
.UsingProvider&lt;mariadbdatabaseprovider&gt;()); [Benchmark]
public void PageOrderBy()
{
Database.Page&lt;productmanufacturelinedetaildto&gt;(1, 20, "order by CreateDate");
} [Benchmark]
public void Page()
{
Database.Page&lt;productmanufacturelinedetaildto&gt;(1, 20);
} [Benchmark]
public void PageOrderByAsync()
{
Database.PageAsync&lt;productmanufacturelinedetaildto&gt;(1, 20, "order by CreateDate");
} [Benchmark]
public void PageAsync()
{
Database.PageAsync&lt;productmanufacturelinedetaildto&gt;(1, 20);
}
}

}

对性能测试结果可以看到,使用Order By对性能的影响确实是非常大。

.NET Core ORM 类库Petapoco中对分页Page添加Order By对查询的影响的更多相关文章

  1. 微型ORM:PetaPoco 学习资料整理

    github地址:https://github.com/CollaboratingPlatypus/PetaPoco petapoco 实体中字段去掉关联(类似于EF中的NotMap) 微型ORM:P ...

  2. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  3. .NET Core 3.0或3.1 类库项目中引用 Microsoft.AspNetCore.App

    本文为原创文章.首发:http://www.zyiz.net/ 在 ASP.NET Core 3.0+ web 项目中已经不需要在 .csproj 中添加对 Microsoft.AspNetCore. ...

  4. ORM之PetaPoco错误--VS中NUGet程序包管理安装PetaPoco

    一般在Vs中使用PetaPoco的时候都是使用NuGet程序包管理来安装PetaPoco的,如果你在安装PetaPoco前设置了ConnectionString,那么PetaPoco中的T4模板会自动 ...

  5. 【译】微型ORM:PetaPoco【不完整的翻译】

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...

  6. 【译】微型ORM:PetaPoco

    PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...

  7. 【译】微型ORM:PetaPoco【不完整的翻译】(转)

    出处:http://www.cnblogs.com/youring2/archive/2012/06/04/2532130.html PetaPoco是一款适用于.Net 和Mono的微小.快速.单文 ...

  8. C#轻型ORM框架PetaPoco试水

    近端时间从推酷app上了解到C#轻微型的ORM框架--PetaPoco.从github Dapper 开源项目可以看到PetaPoco排第四 以下是网友根据官方介绍翻译,这里贴出来. PetaPoco ...

  9. 轮子来袭 vJine.Core Orm 之 01_快速体验

    vJine.Core 是.Net环境下C#类库,在其包含的众多功能中ORM功能尤为突出,现简介如下. 一.支持的数据库: SQLite, MySQL, MS SQL, Oracle. 二.使用方法: ...

随机推荐

  1. charles 开始/暂停模拟慢网速

    本文参考:charles 开始/暂停模拟慢网速 1.2. stop/start throttling 和 2.2 throttling settings 暂时开始慢网速,这个说实话,我自己是不常用的, ...

  2. 工厂/Builder,桥接/策略

    1.工厂 vs 抽象工厂 工厂方法模式: 用来加工.生产对象的类.比如说我想要一个汽车类,但是我总不能现场给你造个车出来对吧?于是我找到工厂类,然后工厂帮我把发动机型号选好,轮胎装好,油漆喷好,然后把 ...

  3. wrk,ab,locust,Jmeter 压测结果比较

    背景: 项目需要对一批接口进行压测,要求是接口的QPS(Quest Per Second每秒请求数)达到6万以上由于楼主一直使用的压力测试工具是jmeter,但是jmeter单台电脑无法达到6万的QP ...

  4. [Spark] 00 - Install Hadoop & Spark

    Hadoop安装 Java环境配置 安装课程:安装配置 配置手册:Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04[依照步骤完成配置] jsk安装使用的链接中第 ...

  5. php下api接口的并发http请求

    php下api接口的并发http请求 ,提高app一个页面请求多个api接口,页面加载慢的问题: func_helper.php/** * 并发http请求 * * [ * 'url' //请求地址 ...

  6. Loadrunner录制步骤及说明

    做好业务准备,如环境配置.服务启动等 打开Virtual User Generator界面---->New---->选择协议,录制网页时一般选择Web(HTTP/HTML) Start R ...

  7. 【译】Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

    本文介绍两个可行的K8s监控方案:Prometheus和Sensu.两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪K8s关键组件的性能.定位故障.接收预警. 拓展阅读:Kubernetes监控 ...

  8. java架构之路-(分布式)初识zookeeper安装与参数详解

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  9. 阿里云服务器CentOS6.9 tomcat配置https安全访问

    应用场景 上线微信小程序的时候,域名要求https安全格式,否则获取数据异常. 第一步.SSL证书获取 获取SSL证书方式很多种,包括网页生成.工具生成等,这里我使用阿里云平台获取免费ssl证书的方法 ...

  10. MySQL-Access denied for user 'username'@'localhost' (using password: YES) 解决

    使用navicat新建MySQL用户保存时提示 Access denied for user 'username'@'localhost' (using password: YES): 解决方法: 请 ...