查询大数据表的效率对比: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

 

第二次执行:

 

 查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net

 

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;

        }



    }

}

  

你可能感兴趣的:(framework)