小马同学的编程日记。

C# 性能优化 之 秒表 Stopwatch。

生词解释:Diagnostics[,daɪəg'nɑstɪks] n.诊断学

using System.Diagnostics;

Stopwatch sw = new Stopwatch ();
sw.Start ();

string str = "a";
for (var i = 0; i < 10000; i++) {
    str += "b";
}
sw.Stop ();
Console.WriteLine (sw.Elapsed); // 输出 从 Start() 到 Stop() 之间经过时间。(单位:秒)

还一个也很方便的。

long startTime = DateTime.Now.Millisecond;
string str = "abc";
for (var i = 0; i < 1000; i++)
{
    str += "abc";
}
long endTime = DateTime.Now.Millisecond;
Console.Write(str);
Console.WriteLine("str 拼接1000次,用时:{0}毫秒。", endTime - startTime);

startTime = DateTime.Now.Millisecond;
str = "";
for (var i = 0; i < 100; i++)
{
    str += 'a';
}
endTime = DateTime.Now.Millisecond;
Console.Write(str);
Console.WriteLine("str 拼接100次,用时:{0}毫秒。", endTime - startTime);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Dapper一个和petapoco差不多的轻量级ORM框架

我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架

叫做dapper,而且被称为the king of ORM。

一:为什么选择Dapper

1. 性能优越:

其实在各大网站上,我们大概都会看到这样的一个对比效果图,在超过500次poco serialization的过程中所表现的性能,我们发现dapper是第二名,

当然第一名谁也无法超越,越底层的当然久越快,同时也就越麻烦。就好像谁能超过“01代码”呢???

2. 支持多数据库

支持多数据库的本质是因为Dapper是对IDBConnection接口进行了方法扩展,比如你看到的SqlMapper.cs,一旦你这样做了,我们也知道,

SqlConnection,MysqlConnection,OracleConnection都是继承于DBConnection,而DBConnection又是实现了IDBConnection的接口,对吧。。。

二:安装Dapper

install dapper的方式通常有两种:

1. 通过nuget进行安装

   如果你不知道怎么用nuget进行安装,或者不知道install-package是什么,可以在browser上找一下,比如下面这样:

然后我们copy到package console 试试看。

2. 在github上获取源码。

为什么要获取源码,是因为用ilspy调试dapper的源码太费劲了,毕竟现在都是异步编程了,从ilspy中看都是匿名方法很多都无法渗透,废话不多

说,我们只要把Dapper文件夹拉出来然后copy到我们的solution就可以了,如下图:

三:快速CURD操作

其实对数据库的操作莫过于CURD,在进行操作之前我们再配一个Users表。

1. 配置Users表

CREATE TABLE [dbo].[Users](
    [UserID] [int] IDENTITY(1,1) NOT NULL,
    [UserName] [varchar](50) NULL,
    [Email] [varchar](100) NULL,
    [Address] [varchar](100) NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
    [UserID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

2. Insert操作

通常来说,有两种insert操作:

<1>单条insert操作

这是一个简单的参数化insert,而且还可以塞入匿名类型,对吧,跟原始的SqlParameter相比,是不是简单的多???

     static void Main(string[] args)
        {
            IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True");

            var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)",
                                   new { UserName = "jack", Email = "380234234@qq.com", Address = "上海" });
        }

<2> InsertBulk操作

既然是Bulk操作,那肯定就是批量插入了,我们要做的就是将上面这个 ”匿名对象" 变成 ”匿名对象集合“ 就可以了。。。为了方便操作,这里定义

一个Users类,比如下面这样。。。

    static void Main(string[] args)
        {
            IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True");

            //var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)",
            //                       new { UserName = "jack", Email = "380234234@qq.com", Address = "上海" });

            var usersList = Enumerable.Range(0, 10).Select(i => new Users()
            {
                Email = i + "qq.com",
                Address = "安徽",
                UserName = i + "jack"
            });

            var result = connection.Execute("Insert into Users values (@UserName, @Email, @Address)",usersList);
        }

2. Query操作

其实在Dapper在query上提供的的文章太多了。。。这篇我们就按照最简单的参数化查询就好了。。。比如我要找到username=jack的记录,如下:

1         static void Main(string[] args)
2         {
3             IDbConnection connection = new SqlConnection("Data Source=.;Initial Catalog=DataMip;Integrated Security=True;MultipleActiveResultSets=True");
4
5             var query = connection.Query<Users>("select * from Users where UserName=@UserName", new { UserName = "jack" });
6
7         }

图上的亮点就在于能够自动化mapper到我们object上面来,这是我们DataReader所不能办到的,对吧~~

3.update操作

这种操作方式,我们还是使用Execute方法来实现,和insert是一种套路的哦。

4. delete操作

这里我还是采用参数化的形式来删除UserID=10这条记录,方式如下:

最终sql的table展示如下,可以看到已经正确的修改了UserID=11的记录,删除了UserID=10的record。。。。当然Dapper好玩的地方多着呢,

这篇只是一个入门而已。。。希望本篇对大家有帮助~~~

 
 

C# 性能优化 之 秒表 Stopwatch。 Dapper一个和petapoco差不多的轻量级ORM框架的更多相关文章

  1. Dapper一个和petapoco差不多的轻量级ORM框架

    我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...

  2. C# 性能优化 之 秒表 Stopwatch。

    生词解释:Diagnostics[,daɪəg'nɑstɪks] n.诊断学 using System.Diagnostics; Stopwatch sw = new Stopwatch (); sw ...

  3. 我把阿里、腾讯、字节跳动、美团等Android性能优化实战整合成了一个PDF文档

    安卓开发大军浩浩荡荡,经过近十年的发展,Android技术优化日异月新,如今Android 11.0 已经发布,Android系统性能也已经非常流畅,可以在体验上完全媲美iOS. 但是,到了各大厂商手 ...

  4. 轻量级ORM框架初探-Dapper与PetaPoco的基本使用

    一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...

  5. 轻量级ORM框架Dapper应用一:Dapper安装

    一.Dapper简介 Dapper是一款轻量级ORM框架,为解决网站访问流量极高而产生的性能问题而构造,主要通过执行TSQL表达式而实现数据库的CQRS. 如果你在项目中遇到性能访问问题,选择Dapp ...

  6. 分享自己写的基于Dapper的轻量级ORM框架~

    1.说明 本项目是一个使用.NET Standard 2.0开发的,基于 Dapper 的轻量级 ORM 框架,包含基本的CRUD以及根据表达式进行一些操作的方法,目前只针对单表,不包含多表连接操作. ...

  7. .NET轻量级ORM框架Dapper入门精通

    一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...

  8. oracle性能优化(项目中的一个sql优化的简单记录)

    在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个 ...

  9. 轻量级ORM框架——第一篇:Dapper快速学习

    我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...

随机推荐

  1. 《发际线总是和我作队》第八次团队作业:Alpha冲刺 第五天

    项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺实验十一 团队作业7:团队项目设计完善&编码 团队名称 发际线总和我作队 作业学 ...

  2. Linux下QT、cannot find -lGL、

    近日在虚拟机下的QT5.11.2安装出现了一个bug,折腾好久才搞定. 环境:vmware + debain 9.5 + qt5.11.2 . QT_DIR = /Qt5.11.2/5.11.2/gc ...

  3. 「 HDOJ P3887 」 Counting Offspring

    翻译 题目描述 给你一棵树,和它的树根 $P$,并且节点从 $1\rightarrow n$ 编号,现在定义 $f(i)$ 为 $i$ 的子树中,节点编号小于 $i$ 的节点的个数. 输入格式 有多组 ...

  4. ssh服务介绍

    基本介绍 ssh:安全的远程登陆 要有客户端与服务器端,客户端主动链接服务端,那么服务端地址是不能变的. socket:套接字 标识应用唯一的地址 tcp/udp port端口号 cat /etc/s ...

  5. Linux用户和组的概念

    目 录 第1章 用户和组存在的关系    1 1.1 我们现在所使用的操作系统都是多用户操作系统    1 1.2 id命令查看当前登陆的用户信息    1 1.3 用户UID的分类    1 1.4 ...

  6. spring tool suite (sts) 创建springmvc(没有实践)

    摘自:STS(Spring Tool Suite)建立默认的spring mvc项目 老外的原创,网址:http://www.codejava.NET/frameworks/spring/spring ...

  7. 部署安装lnmp

    链接:http://pan.baidu.com/s/1skMSgDv 密码:h8rn 此安装包可在阿里云所有linux系统上部署安装.此安装包包含的软件及版本为:nginx:1.0.15.1.2.5. ...

  8. 数据结构实验7:实现二分查找、二叉排序(查找)树和AVL树

    实验7 学号:      姓名:     专业: 7.1实验目的 (1) 掌握顺序表的查找方法,尤其是二分查找方法. (2) 掌握二叉排序树的建立及查找. 查找是软件设计中的最常用的运算,查找所涉及到 ...

  9. 【MySQL】性能优化之 Index Condition Pushdown

    一 概念介绍    Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式.a 当关闭ICP时,index ...

  10. 【Ts 1】 maven初识

    PS:本篇博客,就是对于maven的一个简单的总结,认识.可能更多的是借鉴别人的看法,然后结合自己的使用,再加以说明. 首先,什么是maven: Apache Maven is a software ...