再论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

 

posted @ 2012-08-26 19:30  [秦时明月]  阅读(1667)  评论(9编辑  收藏  举报