我的ORM之十三 -- 性能参数
测试环境
台式机:
主板:映泰Z77
CPU:i5 3470(3.2GHz)
内存:DDR3 1600 8G(单条)
硬盘:创见 SSD 256G
ORM从过程上,可以分两个大的部分:
- 生成SQL
- 把返回的数据(DataReader 或 DataSet)转换成 强类型的结果集
生成SQL测试
用比较复杂的查询(为了测试,查询生成的SQL不能执行,仅为了测试生成SQL的性能)
public ActionResult TestGenSqlP() { Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { dbr.PUser .Select(o => new Columns(o.Id, o.Name.JoinStr())) .Join(dbr.Corporation, (a, b) => a.Id == b.Id) .Join(dbr.City, (a, b) => a.Id == b.Id) .Join(dbr.Annex, (a, b) => a.Id == b.Id) .Join(dbr.Bank, (a, b) => a.Id == b.Id) .Join(dbr.CorpUser, (a, b) => a.Id == b.UserID) .Join(dbr.Menu, (a, b) => a.Id == b.Id) .Where(o => o.Id > 0 & o.Name == "abc" & o.Logo > 0 & o.CreateAt.IsSameDay("2015-05-26".AsDateTime())) .OrderBy(o => dbo.CaseWhen(dbr.PUser.Id < 100, new ConstColumn(1)) .WhenThen(dbr.PUser.Id.Between(100, 200), new ConstColumn(2)) .ElseEnd(new ConstColumn(3)) .Asc) .AutoGroup() .ToCommand(); } return Content(sw.ElapsedMilliseconds.ToString()); }
三次结果:(毫秒)
5950
5804
5801
平均每次生成SQL时间: 0.6毫秒
数据对象化测试
单条数据:
public ActionResult TestToObjectP() { using (new MyOqlConfigScope(ReConfigEnum.SkipPower)) { var menus = dbr.Menu.Select().ToMyOqlSet(); Stopwatch sw = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { dbo.DictionaryToModel(menus.Rows[i % menus.Rows.Count], new MenuRule.Entity()); } return Content(sw.ElapsedMilliseconds.ToString()); } }
三次结果:(毫秒)
237
229
241
强类型化一条数据,平均时间: 0.025毫秒
强类型化单条和多条,底层是一样的。就不用测试了。
作者:NewSea 出处:http://newsea.cnblogs.com/
QQ,MSN:iamnewsea@hotmail.com 如无特别标记说明,均为NewSea原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |