上一篇文章简单的介绍了这个ORM的很基本的用法。

似乎看不出这个ORM有什么特别的地方,是的,这个ORM并不太特别。我认为他简单易用是他的一个特点。

接上一篇

同过Sql语句填充实体

可能有时候有非常复杂的条件用来过滤记录

this.Trans = new StreamContext("NIX");
List<ZULABELMEntity> dd = this.Trans.Querys<ZULABELMEntity>(Sql语句);

 

在性能方面个人感觉似乎也免强过得去,因为没有跟那些太牛的ORM做过比较,只是简单的跟Dapper做了测试比较,比较的结果如文章结尾所示。

测试程序我也不是很清楚是否公正。

测试代码如下。

 

View Code
namespace JitEngine.TDriver
{
    using Dapper;
    using Dot.StreamObject;
    using Muki.Entity;
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Diagnostics;
    using System.Linq;
    using System.Threading;

    public class Multiple
    {
        private StreamContext Trans;

                public void Dapper(string _dbAdapter,string cSQLString,int times,int top)
                {
                    GC.Collect();
                    int gc0 = GC.CollectionCount(0);
                    int gc1 = GC.CollectionCount(1);
                    int gc2 = GC.CollectionCount(2);            
                    System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
                    stopwatch.Start();
        
                    SqlConnection connection = GetOpenConnection(_dbAdapter);
                    long duration1=0;
                    int rec=0;
                    string xx="";
                    for (int x=0;x<times;x++)
                    {
                        List<ZULABELMEntity> dd= connection.Query<ZULABELMEntity>(cSQLString).ToList();
        
                        foreach (ZULABELMEntity test in dd)
                        {
                            xx=test.LABEL_ID;
                            rec++;
                        }
                    }
                    duration1 = stopwatch.ElapsedMilliseconds;
                    Console.WriteLine("");
                    Console.WriteLine(xx);        
          Console.WriteLine(string.Concat(new object[] { "Dapper: 记录数 ", rec, " 时间 ", duration1, "ms" }));
                    Console.WriteLine("GC 0:" + (GC.CollectionCount(0) - gc0).ToString());
                    Console.WriteLine("GC 1:" + (GC.CollectionCount(1) - gc1).ToString());
                    Console.WriteLine("GC 2:" + (GC.CollectionCount(2) - gc2).ToString());            
                }

        public void Querys(string _dbAdapter, string cSQLString, int times, int top)
        {
            GC.Collect();
            int gc0 = GC.CollectionCount(0);
            int gc1 = GC.CollectionCount(1);
            int gc2 = GC.CollectionCount(2);
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            this.Trans = new StreamContext("NIX");
            long duration1 = 0L;
            int rec = 0;
            string xx = "";
            for (int x = 0; x < times; x++)
            {
                List<ZULABELMEntity> dd = this.Trans.Querys<ZULABELMEntity>(cSQLString);
                foreach (ZULABELMEntity test in dd)
                {
                    xx = test.LABEL_ID;
                    rec++;
                }
            }
            duration1 = stopwatch.ElapsedMilliseconds;
            Console.WriteLine("");
            Console.WriteLine(xx);
            Console.WriteLine(string.Concat(new object[] { "Querys: 记录数 ", rec, " 时间 ", duration1, "ms" }));
            Console.WriteLine("GC 0:" + ((GC.CollectionCount(0) - gc0)).ToString());
            Console.WriteLine("GC 1:" + ((GC.CollectionCount(1) - gc1)).ToString());
            Console.WriteLine("GC 2:" + ((GC.CollectionCount(2) - gc2)).ToString());
        }

        public static SqlConnection GetOpenConnection(string x)
        {
            SqlConnection connection = new SqlConnection(x);
            connection.Open();
            return connection;
        }

        public static void Main(string[] args)
        {
            string _dbAdapter = "server=192.168.28.125;database=fms_muki;uid=sa;pwd=m123456;";
            Setting.Instance().RegisterDbConnectionInfo("NIX", "MsSqlServer", _dbAdapter);
            StreamContext Trans = new StreamContext("NIX") {
                Writeable = true
            };
            for (int i = 0; i <= 100; i++)
            {
                ZULABELMEntity _AddNewEntity = new ZULABELMEntity {
                    UID_CODE = "xxxx",
                    LANG_CODE = "ENG",
                    LABEL_ID = "temp" + i
                };
                Trans.RetrieveEntity(_AddNewEntity);
                if (!_AddNewEntity.Verified)
                {
                    _AddNewEntity.LANG_NAME = "temp-new" + i;
                }
                else
                {
                    _AddNewEntity.LANG_NAME = "temp-update" + i;
                }
                Trans.SaveChanges(_AddNewEntity);
            }
            Trans.Commit();
            Thread.Sleep(500);
            Multiple _t = new Multiple();
            int times=10;
            string cSQLString = "SELECT [ZULABELM].[LABEL_ID] AS [LABEL_ID],[ZULABELM].[LANG_CODE] AS [LANG_CODE],[ZULABELM].[UID_CODE] AS [UID_CODE],[ZULABELM].[LANG_NAME] AS [LANG_NAME],[ZULABELM].[ZADD_DATE] AS [ZADD_DATE],[ZULABELM].[ZADD_USER] AS [ZADD_USER],[ZULABELM].[ZCHG_DATE] AS [ZCHG_DATE],[ZULABELM].[ZCHG_FLAG] AS [ZCHG_FLAG],[ZULABELM].[ZCHG_USER] AS [ZCHG_USER],[ZULABELM].[ZSECURITY_CODE1] AS [ZSECURITY_CODE1],[ZULABELM].[ZSECURITY_CODE2] AS [ZSECURITY_CODE2],[ZULABELM].[ZSECURITY_CODE3] AS [ZSECURITY_CODE3],[ZULABELM].[ZSECURITY_CODE4] AS [ZSECURITY_CODE4],[ZULABELM].[ZSECURITY_CODE5] AS [ZSECURITY_CODE5],[ZULABELM].[ZSECURITY_CODE6] AS [ZSECURITY_CODE6],[ZULABELM].[ZSECURITY_RIGHT] AS [ZSECURITY_RIGHT] FROM [ZULABELM]";
            _t.Querys(_dbAdapter, cSQLString, times, 0);
            _t.Dapper(_dbAdapter, cSQLString, times, 0);
            Console.WriteLine("调换位置");
            _t.Dapper(_dbAdapter, cSQLString, times, 0);
            _t.Querys(_dbAdapter, cSQLString, times, 0);
            Console.WriteLine("按任意键退出");
            Console.ReadLine();
        }

    }
}

 

 

 

 

代码打包下载

posted on 2013-01-12 16:26  muki  阅读(3271)  评论(0编辑  收藏  举报