热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

查询大数据表的效率对比:LinqtoSQL、EntityFramework、企业库存储过程、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


 

代码:

 

查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.NetView Code
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 schs = dc.ExecuteQuery("Select * from School");
                
//System.Data.Linq.Table schools = dc.Schools;
                List schools = dc.Schools.ToList();
                int count = 0;
                foreach (School sc in schools)
                {
                    count++;
                }
                //List schs = schools.ToList();
                Response.Write("
Linq to SQL 查询 记录数:
" + schools.Count().ToString());

            }

            sw3.Stop();
            Response.Write("
Linq to SQL 查询 Milliseconds:
" + sw3.ElapsedMilliseconds+"");   
            
            Stopwatch sw2 = new Stopwatch();
            sw2.Start();
            DataSet dr = new DataSet();
            for (int i = 0; i < repeatTimes; i++)
            {
                 dr = selectView();
            }
            Response.Write("
视图查询 记录数:
" + dr.Tables[0].Rows.Count);

            sw2.Stop();
            Response.Write("
视图查询 Milliseconds:
" + sw2.ElapsedMilliseconds + "");


            Stopwatch sw4 = new Stopwatch();
            sw4.Start();

            for (int i = 0; i < repeatTimes; i++)
            {
                ECPDBEntities1 ecp = new ECPDBEntities1();
                ObjectSet classGroup = ecp.ClassGroup;
                //List classGroup = ecp.ClassGroup.ToList();
                
//List 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("
Entity Framework 查询  记录数:
" + classGroup.Count());
            }

            sw4.Stop();
            Response.Write("
Entity Framework 查询 Milliseconds:
" + sw4.ElapsedMilliseconds + "");

            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("
企业库存储过程 to DataReader 记录数:
" + count);

                    reader.Close();
                }
            }

            sw.Stop();
            Response.Write("
企业库存储过程 to DataReader Milliseconds:
" + sw.ElapsedMilliseconds + "");

            Stopwatch sw6 = new Stopwatch();
            sw6.Start();

            DataSet ds=new DataSet();
            for (int i = 0; i < repeatTimes; i++)
            {
                ds = selectProSet();
            }
            Response.Write("
企业库存储过程 to DataSet 记录数:
" + ds.Tables[0].Rows.Count);

            sw6.Stop();
            Response.Write("
企业库存储过程 to DataSet Milliseconds:
" + sw6.ElapsedMilliseconds + "");

            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("
ADO.Net存储过程 to SqlDataReader 记录数:
" + count);
                reader.Close();
            }

            sw5.Stop();
            Response.Write("
ADO.Net存储过程 to SqlDataReader Milliseconds:
" + sw5.ElapsedMilliseconds + "");

            Stopwatch sw1 = new Stopwatch();
            sw1.Start();

            DataSet ds1 = new DataSet();
            for (int i = 0; i < repeatTimes; i++)
            {
                ds1 = selectSQL();
            }
            Response.Write("
企业库SQL语句直接查询 to DataSet 记录数:
" + ds1.Tables[0].Rows.Count);

            sw1.Stop();
            Response.Write("
企业库SQL语句直接查询 to DataSet Milliseconds:
" + sw1.ElapsedMilliseconds + "");

            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("
企业库SQL语句直接查询 to DataReader 记录数:
" + count);
                reader.Close();
            }

            sw8.Stop();
            Response.Write("
企业库SQL语句直接查询 to DataReader Milliseconds:
" + sw8.ElapsedMilliseconds + "");

            //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;
        }

    }
}

 

 

 


推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
author-avatar
qa32qw51
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有