我的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原创,版权私有,翻载必纠。欢迎交流,转载,但要在页面明显位置给出原文连接。谢谢。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端