zoukankan      html  css  js  c++  java
  • 谁认为实体框架的性能还行的人进来谈谈.

    看看测试结果.然后大家看看怎么优化实体框架.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using HD01SystemModels;
    using Model;
    using Qin.Data;
    using CYQ.Data;

    namespace SystemQuestionProc
    {
        
    class Program
        {
                    
    public static List<EventBaseSet> GetEventBaseSetListWhere(string sqlWhere)
            {
                List
    <EventBaseSet> list = new List<EventBaseSet>();
                var sql 
    = "select * from EventBaseSet";
                
    if (sqlWhere != "") sql += " where " + sqlWhere;
                var reader 
    = DBTool.Database.GetDbDataReader(sql);
                
    while (reader.Read())
                {
                    var data 
    = new EventBaseSet();
                    data.EventID 
    = reader.GetInt64(0);
                    data.EventName 
    = reader.GetString(1);//注意此字段可能为空
                    data.Domain = reader.GetString(2);//注意此字段可能为空
                    data.StartTime = reader.GetDateTime(3);//注意此字段可能为空
                    data.EndTime = reader.GetDateTime(4);//注意此字段可能为空
                    
    //data.LogoPath=reader.GetString(5);//注意此字段可能为空
                    
    //data.Descript=reader.GetString(6);//注意此字段可能为空
                    data.CreateTime = reader.GetDateTime(7);//注意此字段可能为空
                    
    //data.Layout=reader.GetString(8);//注意此字段可能为空
                    data.Style = reader.GetInt32(9);
                    data.EventType 
    = reader.GetInt32(10);//注意此字段可能为空
                    data.ShowContactInfo = reader.GetBoolean(11);//注意此字段可能为空
                    data.ShowMemo = reader.GetString(12);//注意此字段可能为空
                    data.ShowLock = reader.GetBoolean(13);//注意此字段可能为空
                    
    //data.RegistMemo=reader.GetString(14);//注意此字段可能为空
                    data.RegistLock = reader.GetBoolean(15);//注意此字段可能为空
                    data.SugestLock = reader.GetBoolean(16);//注意此字段可能为空
                    
    //data.BackGroundImg=reader.GetString(17);//注意此字段可能为空
                    data.EventStage = reader.GetInt32(18);//注意此字段可能为空
                    data.ShowName = reader.GetBoolean(19);//注意此字段可能为空
                    data.ShowLogo = reader.GetBoolean(20);//注意此字段可能为空
                    data.ShowLink = reader.GetBoolean(21);//注意此字段可能为空
                    
    //data.AwardTime=reader.GetString(22);//注意此字段可能为空
                    
    //data.HeadBGColor=reader.GetString(23);//注意此字段可能为空
                    
    //data.HeadBGImage=reader.GetString(24);//注意此字段可能为空
                    
    //data.BodyBGColor=reader.GetString(25);//注意此字段可能为空
                    
    //data.BodyBGImage=reader.GetString(26);//注意此字段可能为空
                    data.NowPeriodID = reader.GetInt32(27);
                    data.UpdateTime 
    = reader.GetDateTime(28);
                    data.EnabledHeadHtml 
    = reader.GetBoolean(29);
                    data.EnabledFooterHtml 
    = reader.GetBoolean(30);
                    
    //data.HeadHtml=reader.GetString(31);//注意此字段可能为空
                    
    //    data.FooterHtml=reader.GetString(32);//注意此字段可能为空
                    data.LimitJoinnerCount = reader.GetInt32(33);
                    data.Days 
    = reader.GetInt32(34);
                    
    //data.WhyClose=reader.GetString(35);//注意此字段可能为空
                    data.Xuan = reader.GetString(36);
                    data.AddToPlatformHomePage 
    = reader.GetBoolean(37);
                    
    //data.VisitedCount=reader.GetInt64(38);//注意此字段可能为空
                    
    //data.AddToUion=reader.GetBoolean(39);//注意此字段可能为空
                    data.EventModelSelect_SelectID = reader.GetInt32(40);
                    data.Creater_CreaterID 
    = reader.GetInt32(41);
                    data.UserRegistSelected_ID 
    = reader.GetInt32(42);
                    list.Add(data);
                }
                reader.Close();
                
    return list;
            }

            
    public static void Main(string[] args)
            {
                
                
                
             
                    
                var t1
    =DateTime.Now.Ticks;
                
    for (int i = 0; i < 50; i++) {
                    
    using(MAction action = new MAction("EventBaseSet"))
                    {
                        
    if (action.Fill("EventID=2"))//查询ID>888的结果中取ID最大的的单行数据
                        {
                            var data
    =action.Data.ToEntity<Model.EventBaseSet>();//UserInfo为实体类。
                        }
                    }
                    
                }
                Console.WriteLine(
    "------CYQ.Data的测试-----");
                 
                var t2
    =DateTime.Now.Ticks;
                Console.WriteLine(t2
    -t1);
                Console.WriteLine(
    "-------------------------------");
                
                
                var t3
    =DateTime.Now.Ticks;
                
    for (int i = 0; i < 50; i++) {
                    var sql
    ="select * from EventBaseSet where EventID=2";
                    var data
    =DBTool.Database.GetEntity<EventBaseSet>(sql);
                }
                Console.WriteLine(
    "------Qin.Data的测试-----");
                 
                var t4
    =DateTime.Now.Ticks;
                Console.WriteLine(t4
    -t3);
                Console.WriteLine(
    "-------------------------");
                
                
            
                var t5
    =DateTime.Now.Ticks;
                
    for (int i = 0; i < 50; i++) {
                    var   data
    =GetEventBaseSetListWhere(" EventID=2")[0];
                }
                Console.WriteLine(
    "------纯sql的测试-----");
                 
                var t6
    =DateTime.Now.Ticks;
                Console.WriteLine(t6
    -t5);
                Console.WriteLine(
    "-------------------------");
                
                var t7
    =DateTime.Now.Ticks;
                
    for (int i = 0; i < 50; i++) {
                    
    using (HD01SystemDBEntities db2=new HD01SystemDBEntities()){
                        var data
    =db2.EventBaseSet.First(m => m.EventID == 2);
                        
                    }
                }
                Console.WriteLine(
    "------实体框架的测试-----");
                 
                var t8
    =DateTime.Now.Ticks;
                Console.WriteLine(t8
    -t7);
                Console.WriteLine(
    "-------------------------");
                
                Console.WriteLine(
    "Press any key to continue . . . ");
                Console.Read();
            }

        }
    }

    总结:

    1.实体框架的查询可想而知,这也是我为什么不用它的原因,如果还有异议请告知我如何提高此性能.

    2.CYQ.DATA设计方案中的纯反射导致性能降低,建议秋天兄改进之.

    3.纯的sql实现,其实我已经写了一个代码生成器,所有的生成代码作为一个不变数据层(不牵扯业务逻辑),也是没有影响的,但我后来发现

    当系统中存在着DBNULL时,MSIL的实现方式速度会反而高于纯sql.

    如果关注的各路英雄有什么建议和反驳的意见请以实际出发数据说话.请指教

     




    少侠,我看你气度不凡天赋异禀,这么帅,来了就给推荐一把吧




    我的最近更新
    最新发布文章、框架、咨询等,来看看吧
  • 相关阅读:
    java复习基础篇——反射
    java复习基础篇——Mysql数据库
    java复习基础篇——网络协议
    java复习基础篇——类型转换
    Full Source下载(IE扩展)
    [原]JS俄罗斯方块
    swt api和demo
    W3CSchool.chm
    一个C#写的RSS
    [原]JS Eval参数单引号问题
  • 原文地址:https://www.cnblogs.com/humble/p/2052089.html
Copyright © 2011-2022 走看看