您的位置:首页 > 其它

我的ORM之十三 -- 性能参数

2015-06-03 22:19 344 查看
我的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毫秒

强类型化单条和多条,底层是一样的。就不用测试了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: