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

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

  

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

  1. 浅谈利用PLSQL的多线程处理机制,加快处理大数据表的效率

    我们在处理大数据表的时候经常会感觉的处理速度不够快,效率不够高,那么今天下面我就来简单实现下PLSQL的多线程编程处理数据: 我模拟一个简单的场景,把某一张表中的数据(当然这张表的数据非常大)同步到目 ...

  2. WinForm查询大数据界面假死,使用异步调用解决

    用DataGridView无分页绑定一个几千条数据的查询,查询的时候界面直接卡死十几秒,用户体验非常不好,因此用异步操作解决界面卡死的问题原本场景:点击[查询]后,界面直接卡死优化场景:点击[查询]后 ...

  3. 3dTiles 数据规范详解[3] 内嵌在瓦片文件中的两大数据表

    转载请声明出处:全网@秋意正寒 零.本篇前言 说实话,我很纠结是先介绍瓦片的二进制数据文件结构,还是先介绍这两个重要的表.思前想后,我决定还是先介绍这两个数据表. 因为这两个表不先给读者灌输,那么介绍 ...

  4. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  5. Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串

    应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select  逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_ ...

  6. 【MySQL】MySQL中查询出数据表中存在重复的值list

    1.目的:查询MySQL数据表中,重复记录的值 2.示例: 3.代码: select serial_num,count(*) as count FROM card_ticket GROUP BY se ...

  7. Oracle大数据表的分表处理

    1.首先给大数据表创建rownum序列号 --增加序列号字段 alter table TEST add xlh number; --填充序列号 update TEST set xlh = rownum ...

  8. 在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析

    在HDInsight中从Hadoop的兼容BLOB存储查询大数据的分析 低成本的Blob存储是一个强大的.通用的Hadoop兼容Azure存储解决方式无缝集成HDInsight.通过Hadoop分布式 ...

  9. Oracle使用游标查询所有数据表备注

    功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...

随机推荐

  1. Nginx负载均衡权重,ip_hash

    nginx为后端web服务器(apache,nginx,tomcat,weblogic)等做反向代理 几台后端web服务器需要考虑文件共享,数据库共享,session共享问题.文件共享可以使用nfs, ...

  2. HTML Entity 字符实体(字符转义)

    目录 1. HTML Entity 2. 字符与Entity Name的互相转换 3. 字符与Entity Number的互相转换 1. HTML Entity 1.1 介绍 在编写HTML页面时,需 ...

  3. 最新以及历史各版本 .NET Framework 的下载

    唔,如题,详见地址:https://www.microsoft.com/net/download/windows

  4. android开发的童鞋们 你该学点C++

    更多关于C++的知识点,请关注android开发应该学点C++(索引贴)android开发应该学点C++(其他) (*android开发论坛----android开发学习----android开发*) ...

  5. Source Insight 中文注释为乱码解决办法(完美解决,一键搞定)

    我从网上查了一堆解决办法,但是都是2017年以前的解决方案,并且都是针对于source insight 3.5及以下版本的,目前SI软件版本都到4.0了,应该有新方法出现了. ------------ ...

  6. 本地搭建Wooyun漏洞库环境

    众所周知,wooyun上有太多含金量的漏洞了,虽然互联网上也有相关的漏洞资源分享,但是万一有朝一日也被和谐了就又麻烦了,最放心的方式就是漏洞库放在本地,在本地搭建一套环境最好不过了,以下操作演示了如何 ...

  7. 【Linux高级驱动】平台设备驱动机制的编程流程与编译进内核

    [平台设备驱动机制的编程流程] [如何将驱动静态的编译进内核镜像] 1.添加资源(dev-led.c) 1.1:一般来说,系统习惯上将资源放在arch/arm/plat-samsung/目录中 cp ...

  8. [Linux]linux如何把文件切成多块

    转:https://blog.csdn.net/qq_42224274/article/details/80880914 将一个大文件分成若干个小文件方法例如将一个BLM.txt文件分成前缀为 BLM ...

  9. GitStack 第三方开源服务器端

      GitStack 开源集成Git的界面服务器端 官网URL:http://gitstack.com     详情 请看<分布式版本控制系统Git--使用GitStack+TortoiseGi ...

  10. python2.7 处理unicode和ascii字符串混用问题

    python2.7默认的编码方式为ascii码,如下可以查询: import sys sys.getdefaultencoding() 如果直接在unicode和ascii字符串之间做计算.比较.连接 ...