zoukankan      html  css  js  c++  java
  • 再论ORM性能(续)Moon.ORM4.1修订版发布

             此版本中采用了全新的数据获取引擎,采用自动编译加动态代理相结合的方式,性能同时得到有效提高,以下的数据显示:目前除了纯ADO.net,moon的性能几乎是目前所有orm中最高的。关于fish的事情,我再次重申主要目的是反驳其性能高于纯ADO之说,我承认那日测试结果比较浮动,或许可以大家说那日略低于fish.而今日我没有意义再分伯仲.


    /*
    *测试代码如下
     
    */
    using System;
    using System.Configuration;
    using System.Data.SqlClient;
    using System.Linq;

    using ClownFish;
    using Dapper;
    using Moon.Orm;

    namespace TestFish
    {
        public class OrderInfo
        {
            public int OrderID { getset; }
            public DateTime OrderDate { getset; }
            public decimal SumMoney { getset; }
            public string Comment { getset; }
            public bool Finished { getset; }
            public int ProductID { getset; }
            public decimal UnitPrice { getset; }
            public int Quantity { getset; }
            public string ProductName { getset; }
            public int CategoryID { getset; }
            public string Unit { getset; }
            public string Remark { getset; }
            
            // 注意:客户信息有可能会是DBNull
            public int? CustomerID { getset; }
            public string CustomerName { getset; }
            public string ContactName { getset; }
            public string Address { getset; }
            public string PostalCode { getset; }
            public string Tel { getset; }
        }
        class Program
        {
            static void AppInit()
            {
                ConnectionStringSettings setting = ConfigurationManager.ConnectionStrings["MyNorthwind"];
                ConnectionString = setting.ConnectionString;
                // 配置 ClownFish
                ClownFish.DbContext.RegisterDbConnectionInfo("default", setting.ProviderName, "@", setting.ConnectionString);
                Type[] types = ClownFish.BuildManager.FindModelTypesFromCurrentApplication(x => x.Namespace == "TestFish");
                ClownFish.BuildManager.CompileModelTypesSync(types, true);
                // 配置 FishWebLib
                FishWebLib.FishDbContext.Init(setting.ProviderName, "@", setting.ConnectionString);
            }
            public static SqlConnection GetSqlConnection()
            {
                var connection = new SqlConnection(ConfigurationManager.AppSettings["linkString"]);
                connection.Open();
                return connection;
            }
            
            protected static string ConnectionString;
            private static  ClownFish.DbContext db;

            public static readonly string QueryText2 = @"
    select top (1000) d.OrderID, d.OrderDate, d.SumMoney, d.Comment, d.Finished,
    dt.ProductID, dt.UnitPrice, dt.Quantity,
    p.ProductName, p.CategoryID, p.Unit, p.Remark,
    c.CustomerID, c.CustomerName, c.ContactName, c.Address, c.PostalCode, c.Tel
    from Orders d
    inner join [Order Details] dt on d.OrderId = dt.OrderId
    inner join Products p on dt.ProductId = p.ProductId
    left join Customers c on d.CustomerId = c.CustomerId
    ";
            public static void Main(string[] args)
            {
                //-------------这些可以不理会
                var t1=DateTime.Now.Ticks;
                AppInit();
                db = new ClownFish.DbContext(false);
                var parameter = new { TopN =1000 };
                var list= ClownFish.DbHelper.FillList<OrderInfo>(
                    QueryText2, parameter, db, ClownFish.CommandKind.SqlTextWithParams);
                var t2=DateTime.Now.Ticks;
                Console.WriteLine(t2-t1);
                var t3=DateTime.Now.Ticks;
                var list2=DBFactory.GetEntities<OrderInfo>(QueryText2);                                         
                var t4=DateTime.Now.Ticks;
                Console.WriteLine(t4-t3);
                //--------------------------------------------------------------------------------------
                
                
    //--------------------前面的可以不算,咱们正式开始
                var tFish1=DateTime.Now.Ticks;
                for (int i = 0; i < 2000; i++) {
                    var listFish= ClownFish.DbHelper.FillList<OrderInfo>(
                        QueryText2, null, db, ClownFish.CommandKind.SqlTextNoParams);
                }
                
                var tFish2=DateTime.Now.Ticks;
                Console.WriteLine("小鱼的时间:"+(tFish2-tFish1));
                
                var tMoon1=DateTime.Now.Ticks;
                for (int i = 0; i < 2000; i++) {
                    var listMoon=DBFactory.GetEntities<OrderInfo>(QueryText2);
                }
                var tMoon2=DateTime.Now.Ticks;
                Console.WriteLine("MOON的时间:"+(tMoon2-tMoon1));
                SqlConnection connection = Program.GetSqlConnection();
                var tRapper1=DateTime.Now.Ticks;
                for (int i = 0; i < 2000; i++) {
                    var listRapper = connection.Query<OrderInfo>(QueryText2, null).ToList<OrderInfo>();
                }
                var tRapper2=DateTime.Now.Ticks;
                Console.WriteLine("datarapper的时间:"+(tRapper2-tRapper1));
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
            }
        }
    }

    欢迎大家公测. /Files/humble/测试项目.zip

    moon详情:

    QQ群:
    216965349

  • 相关阅读:
    C# winform 打包成安装程序(exe)
    gitHub----【Mac】sourcetree连接github,报错:fatal:Authentication failed for'https://git…。或提示password required 解决方案
    python3-----往一个字符串中循环添加数据
    python3.8----从多层嵌套Json中解析所需要的值
    记录一些工作知识
    【转】彻底搞懂 async & defer
    【转】判断JS数据类型的四种方法
    动态表单设计
    封装,继承,多态
    语义化版本
  • 原文地址:https://www.cnblogs.com/humble/p/2657632.html
Copyright © 2011-2022 走看看