博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net
阅读量:6587 次
发布时间:2019-06-24

本文共 8691 字,大约阅读时间需要 28 分钟。

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

 

 

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

 

第二次执行:

 

 

 

代码:

 

ExpandedBlockStart.gif
View 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<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;
        }
    }
}

 

 

 

转载地址:http://weqno.baihongyu.com/

你可能感兴趣的文章
十五、(1)集合Collection
查看>>
Install DB2 V9.5 for Linux(64bit)
查看>>
学习日记0810包,logging模块
查看>>
bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
查看>>
iOS界面传值的方式(7种)
查看>>
将font-size设置为 12px 以下,Chrome浏览器只能显示12px怎么办?
查看>>
Android 系统名字、版本、API level的对应关系
查看>>
胡适致迷茫大学生:成不在一时,功必不唐捐
查看>>
Hadoop 的常用组件一览
查看>>
常用命令之ps
查看>>
Google 招聘(Tech Lead/Manager - Beijing)
查看>>
Python之日志处理(logging模块)
查看>>
Git命令整理
查看>>
Qt学习之路_13(简易俄罗斯方块)
查看>>
浅谈微信卡券功能开发(1)
查看>>
gdb 调试程序步骤
查看>>
5、URLConnection(3)
查看>>
bzero函数
查看>>
Chromium之文件类型
查看>>
C#MVC使用二进制流显示图片
查看>>