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

我的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毫秒

 

强类型化单条和多条,底层是一样的。就不用测试了。

 

posted @   NewSea  阅读(344)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示