zoukankan      html  css  js  c++  java
  • 查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net

    最近因为要开发大数据量网站,特作比较。

    Linq to SQL 查询 记录数:399997
    Linq to SQL 查询 Milliseconds:1910
    视图查询 记录数:399997
    视图查询 Milliseconds:3435
    Entity Framework 查询 记录数:400000
    Entity Framework 查询 Milliseconds:4049
    企业库存储过程 to DataReader 记录数:399997
    企业库存储过程 to DataReader Milliseconds:321
    企业库存储过程 to DataSet 记录数:399997
    企业库存储过程 to DataSet Milliseconds:2807
    ADO.Net存储过程 to SqlDataReader 记录数:399997
    ADO.Net存储过程 to SqlDataReader Milliseconds:306
    企业库SQL语句直接查询 to DataSet 记录数:399997
    企业库SQL语句直接查询 to DataSet Milliseconds:3015
    企业库SQL语句直接查询 to DataReader 记录数:399997
    企业库SQL语句直接查询 to DataReader Milliseconds:367

    第二次执行:

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Microsoft.Practices.EnterpriseLibrary.Data;
    using System.Data.Common;
    using System.Data;
    using System.Diagnostics;
    using System.Data.Objects;
    using System.Data.SqlClient;
    
    namespace WebApplication1
    {
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
                SeewoECP.Model.School model = new SeewoECP.Model.School();
                model.ID = "1";
                model.Name = "test";
                model.Country = "test";
                model.Province = "test";
                model.City = "test";
                model.Address = "test";
                model.ZipCode = "test";
                model.Phone = "test";
                model.IsApproved = true;
    
                int repeatTimes = 1;
    
                Stopwatch sw3 = new Stopwatch();
                sw3.Start();
    
                for (int i = 0; i < repeatTimes; i++)
                {
                    DataClasses1DataContext dc = new DataClasses1DataContext();
                    
                    //IEnumerable<School> schs = dc.ExecuteQuery<School>("Select * from School");
                    //System.Data.Linq.Table<School> schools = dc.Schools;
                    List<School> schools = dc.Schools.ToList();
                    int count = 0;
                    foreach (School sc in schools)
                    {
                        count++;
                    }
                    //List<School> schs = schools.ToList();
                    Response.Write("<br>Linq to SQL 查询 记录数:" + schools.Count().ToString());
    
                }
    
                sw3.Stop();
                Response.Write("<br>Linq to SQL 查询 Milliseconds:<font color='#FF0000'>" + sw3.ElapsedMilliseconds+"</font>");   
                
                Stopwatch sw2 = new Stopwatch();
                sw2.Start();
                DataSet dr = new DataSet();
                for (int i = 0; i < repeatTimes; i++)
                {
                     dr = selectView();
                }
                Response.Write("<br>视图查询 记录数:" + dr.Tables[0].Rows.Count);
    
                sw2.Stop();
                Response.Write("<br>视图查询 Milliseconds:<font color='#FF0000'>" + sw2.ElapsedMilliseconds + "</font>");
    
    
                Stopwatch sw4 = new Stopwatch();
                sw4.Start();
    
                for (int i = 0; i < repeatTimes; i++)
                {
                    ECPDBEntities1 ecp = new ECPDBEntities1();
                    ObjectSet<ClassGroup> classGroup = ecp.ClassGroup;
                    //List<ClassGroup> classGroup = ecp.ClassGroup.ToList();
                    //List<ClassGroup> classGroup =
                    //from s in ecp.ClassGroup where s.id < 10 select s.name;
    
                    //ClassGroup cg = classGroup.Single(s => s.ID == "1");
                    int count = 0;
                    foreach (ClassGroup c in classGroup)
                    {
                        count++;
                        //Response.Write( c.ClassName);
                    }
    
                        Response.Write("<br>Entity Framework 查询  记录数:" + classGroup.Count());
                }
    
                sw4.Stop();
                Response.Write("<br>Entity Framework 查询 Milliseconds:<font color='#FF0000'>" + sw4.ElapsedMilliseconds + "</font>");
    
                Stopwatch sw = new Stopwatch();
                sw.Start();
    
                for (int i = 0; i < repeatTimes; i++)
                {
    
                    IDataReader reader = selectPro();
                    if (reader != null)
                    {
                        int count = 0;
                        while (reader.Read())
                        {
                            count++;
                            //Response.Write(String.Format("{0}, {1}",reader[0], reader[1]));
                        }
                        Response.Write("<br>企业库存储过程 to DataReader 记录数:" + count);
    
                        reader.Close();
                    }
                }
    
                sw.Stop();
                Response.Write("<br>企业库存储过程 to DataReader Milliseconds:<font color='#FF0000'>" + sw.ElapsedMilliseconds + "</font>");
    
                Stopwatch sw6 = new Stopwatch();
                sw6.Start();
    
                DataSet ds=new DataSet();
                for (int i = 0; i < repeatTimes; i++)
                {
                    ds = selectProSet();
                }
                Response.Write("<br>企业库存储过程 to DataSet 记录数:" + ds.Tables[0].Rows.Count);
    
                sw6.Stop();
                Response.Write("<br>企业库存储过程 to DataSet Milliseconds:<font color='#FF0000'>" + sw6.ElapsedMilliseconds + "</font>");
    
                Stopwatch sw5 = new Stopwatch();
                sw5.Start();
    
                for (int i = 0; i < repeatTimes; i++)
                {
                    SqlDataReader reader = selectNormalPro();
                    int count = 0;
                    while (reader.Read())
                    {
                        count++;
                        //Response.Write(String.Format("{0}, {1}",reader[0], reader[1]));
                    }
    
                    Response.Write("<br>ADO.Net存储过程 to SqlDataReader 记录数:" + count);
                    reader.Close();
                }
    
                sw5.Stop();
                Response.Write("<br>ADO.Net存储过程 to SqlDataReader Milliseconds:<font color='#FF0000'>" + sw5.ElapsedMilliseconds + "</font>");
    
                Stopwatch sw1 = new Stopwatch();
                sw1.Start();
    
                DataSet ds1 = new DataSet();
                for (int i = 0; i < repeatTimes; i++)
                {
                    ds1 = selectSQL();
                }
                Response.Write("<br>企业库SQL语句直接查询 to DataSet 记录数:" + ds1.Tables[0].Rows.Count);
    
                sw1.Stop();
                Response.Write("<br>企业库SQL语句直接查询 to DataSet Milliseconds:<font color='#FF0000'>" + sw1.ElapsedMilliseconds + "</font>");
    
                Stopwatch sw8 = new Stopwatch();
                sw8.Start();
    
                for (int i = 0; i < repeatTimes; i++)
                {
                    IDataReader reader = selectSQLReader();
                    
                    int count = 0;
                    while (reader.Read())
                    {
                        count++;
                        //Response.Write(String.Format("{0}",reader["ID"]));
                    }
    
                    Response.Write("<br>企业库SQL语句直接查询 to DataReader 记录数:" + count);
                    reader.Close();
                }
    
                sw8.Stop();
                Response.Write("<br>企业库SQL语句直接查询 to DataReader Milliseconds:<font color='#FF0000'>" + sw8.ElapsedMilliseconds + "</font>");
    
                //DataSet d1 = select1();
                //DataSet d2 = select2();
                //IDataReader dr = select3();
            }
    
            public int Add(SeewoECP.Model.School model,int i)
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetStoredProcCommand("InsertSchool");
                db.AddInParameter(dbCommand, "ID", DbType.String, i);
                db.AddInParameter(dbCommand, "Name", DbType.String, model.Name);
                db.AddInParameter(dbCommand, "Country", DbType.String, model.Country);
                db.AddInParameter(dbCommand, "Province", DbType.String, model.Province);
                db.AddInParameter(dbCommand, "City", DbType.String, model.City);
                db.AddInParameter(dbCommand, "Address", DbType.String, model.Address);
                db.AddInParameter(dbCommand, "ZipCode", DbType.String, model.ZipCode);
                db.AddInParameter(dbCommand, "Phone", DbType.String, model.Phone);
                db.AddInParameter(dbCommand, "IsApproved", DbType.Boolean, model.IsApproved);
                return db.ExecuteNonQuery(dbCommand);
            }
    
            Database db;
            DbCommand dbCommand;
            public DataSet select()
            {
                try
                {
                    db = DatabaseFactory.CreateDatabase();
                    dbCommand = db.GetStoredProcCommand("SelectSchoolsAll");
                    return db.ExecuteDataSet(dbCommand);
                }
                finally
                {
                    dbCommand.Connection.Close();
                    dbCommand.Connection.Dispose();
                }
            }
    
            public DataSet select1()
            {
                //Database db1 = DatabaseFactory.CreateDatabase();
                dbCommand = db.GetStoredProcCommand("SelectSystemErrorLogsAll");
                return db.ExecuteDataSet(dbCommand);
            }
    
            public DataSet select2()
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetStoredProcCommand("SelectSystemErrorLogsAll");
                return db.ExecuteDataSet(dbCommand);
            }
    
            public DataSet selectSQL()
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetSqlStringCommand("select * from School");
                return db.ExecuteDataSet(dbCommand);
            }
    
            public IDataReader selectSQLReader()
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetSqlStringCommand("select * from School");
                return db.ExecuteReader(dbCommand);
            }
    
            public DataSet selectView()
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetSqlStringCommand("select * from ViewsSchool");
                return db.ExecuteDataSet(dbCommand);
            }
    
            public DataSet selectProSet()
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetStoredProcCommand("SelectSchoolsAll");
                return db.ExecuteDataSet(dbCommand);
            }
    
            public IDataReader selectPro()
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbCommand dbCommand = db.GetStoredProcCommand("SelectSchoolsAll");
                return db.ExecuteReader(dbCommand);
            }
    
            public SqlDataReader selectNormalPro()
            {
                SqlConnection connection = new SqlConnection(@"Data Source=.SQLEXPRESS;Initial Catalog=ECPDB;Integrated Security=SSPI;");
                SqlDataReader returnReader;
                connection.Open();
                SqlCommand command = BuildQueryCommand(connection, "SelectSchoolsAll", null);
                command.CommandType = CommandType.StoredProcedure;
                returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
                return returnReader;
            }
    
            private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
            {
                SqlCommand command = new SqlCommand(storedProcName, connection);
                command.CommandType = CommandType.StoredProcedure;
                if (parameters != null)
                {
                    foreach (SqlParameter parameter in parameters)
                    {
                        if (parameter != null)
                        {
                            // 检查未分配值的输出参数,将其分配以DBNull.Value.
                            if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                                (parameter.Value == null))
                            {
                                parameter.Value = DBNull.Value;
                            }
                            command.Parameters.Add(parameter);
                        }
                    }
                }
    
                return command;
            }
    
        }
    }
    

      

  • 相关阅读:
    Java中的分代垃圾回收策略
    Java Web容器的启动与处理请求的过程
    利用LRUMap 设计缓存
    《淘宝技术这十年》
    Java中的堆内存、栈内存、静态存储区
    JAVA中的代理技术(静态代理和动态代理)
    java中的synchronized关键字
    代理模式
    状态模式
    SSIS 错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER
  • 原文地址:https://www.cnblogs.com/haiyabtx/p/3681137.html
Copyright © 2011-2022 走看看