OleDbDataReader快速数据读取方式
查询得到OleDbDataReader后,有三种方式支持数据读取,如下:
//方法一**速度中等
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
var t1 = reader[];
} //方法二**速度最慢
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
var t1 = reader["字段名"];
} //方法三**速度最快
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
var t1 = reader.GetValue();
}
关于速度的描述,下面我们来简单验证一下。
有一个数据库,数据库中的表TEST有105945行数据,设计一个循环读取来测试他们的读取速度。
测试源码如下:
static void Main(string[] args)
{
string connstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source={0};", "F:\\2.mdb");
string s1 = "ID";
string s2 = "探测号";
string s3 = "X";
string s4 = "Y";
string s5 = "H";
string sql = string.Format("SELECT {0},{1},{2},{3},{4} FROM 管点表", s1, s2, s3, s4, s5);
TimeSpan time1 = new TimeSpan();
TimeSpan time2 = new TimeSpan();
TimeSpan time3 = new TimeSpan(); int count = ; //数据库中查询的表有105945行
for (int i = ; i < count; i++)
{
using (OleDbConnection conn = new OleDbConnection(connstr))
{
#region
conn.Open();
OleDbCommand command = conn.CreateCommand();
command.CommandText = sql;
OleDbDataReader reader = command.ExecuteReader();
DateTime now = DateTime.Now;
while (reader.Read())
{
var t1 = reader[]; var t2 = reader[]; var t3 = reader[]; var t4 = reader[]; var t5 = reader[];
}
time1 = time1 + (DateTime.Now - now);
#endregion
}
}
for (int i = ; i < count; i++)
{
using (OleDbConnection conn = new OleDbConnection(connstr))
{
#region
conn.Open(); OleDbCommand command2 = conn.CreateCommand();
command2.CommandText = sql;
OleDbDataReader reader = command2.ExecuteReader();
DateTime now = DateTime.Now;
while (reader.Read())
{
var t1 = reader[s1]; var t2 = reader[s2]; var t3 = reader[s3]; var t4 = reader[s4]; var t5 = reader[s5];
}
time2 = time2 + (DateTime.Now - now);
#endregion
}
}
for (int i = ; i < count; i++)
{
using (OleDbConnection conn = new OleDbConnection(connstr))
{
#region
conn.Open(); OleDbCommand command3 = conn.CreateCommand();
command3.CommandText = sql;
OleDbDataReader reader = command3.ExecuteReader();
DateTime now = DateTime.Now;
while (reader.Read())
{
var t1 = reader.GetValue(); var t2 = reader.GetValue(); var t3 = reader.GetValue(); var t4 = reader.GetValue(); var t5 = reader.GetValue();
}
time3 = time3 + (DateTime.Now - now);
#endregion
}
}
Console.WriteLine(string.Format("方法一:\r\n耗时:{0}s", time1.TotalSeconds));
Console.WriteLine(string.Format("方法二:\r\n耗时:{0}s", time2.TotalSeconds));
Console.WriteLine(string.Format("方法三:\r\n耗时:{0}s", time3.TotalSeconds));
Console.ReadKey();
}
循环50次结果,即50*105945:



100次循环结果:,即100*105945:

OleDbDataReader快速数据读取方式的更多相关文章
- geotrellis使用(二)geotrellis-chatta-demo以及geotrellis框架数据读取方式初探
在上篇博客(geotrellis使用初探)中简单介绍了geotrellis-chatta-demo的大致工作流程,但是有一个重要的问题就是此demo如何调取数据进行瓦片切割分析处理等并未说明,经过几天 ...
- XML数据读取方式性能比较(一)
原文:XML数据读取方式性能比较(一) 几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较 ...
- TensorFlow数据读取方式:Dataset API
英文详细版参考:https://www.cnblogs.com/jins-note/p/10243716.html Dataset API是TensorFlow 1.3版本中引入的一个新的模块,主要服 ...
- XML教程、语法手册、数据读取方式大全
XML简单易懂教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 XML --数据格式的写法 二 Re ...
- MYSQL 的数据读取方式
例子: create table T(X bit(8)); insert into T (X) values(b'11111111'); select X from T; 这个时候会发现这个X 是乱码 ...
- TensorFlow全新的数据读取方式:Dataset API入门教程
TensorFlow.data : http://tech.ifeng.com/a/20171109/44752505_0.shtml Pytorch:https://ptorch.com/docs/ ...
- DataReader类型化数据读取与装箱性能研究
前言 在各种ORM框架或者SQL映射框架(例如MyBatis,SOD框架之SQL-MAP功能)中,都有将查询的结果映射为内存对象的需求,包括映射到实体类.简单类型(例如Java的POJO,.NET的P ...
- Java中9种IO的读取方式
数据的读写,按照数据类型可以分为两种:字符流和字节流(二者区别?).所以数据读取方式按照数据类型也可以分为两类:字节流的读取和字符流的读取. 一.字节流读取操作: | | |-----1.FileI ...
- Tensorflow学习-数据读取
Tensorflow数据读取方式主要包括以下三种 Preloaded data:预加载数据 Feeding: 通过Python代码读取或者产生数据,然后给后端 Reading from file: 通 ...
随机推荐
- SIMLock锁卡功能解析
一.锁卡背景介绍 锁卡即SIMLock,当手机开机启动或者插入SIM卡时,手机modem侧预置在NV项中的配置信息会与SIM卡中的信息做比对,检测是否匹配.若匹配,则SIM卡可以正常使用.若不匹配,则 ...
- Java Servlet+Objective-c图上传 步骤详细
一. Servlet 1.创建图片保存的路径 在项目的WebContent下创建一个上传图片的专属文件夹. 这个文件夹创建后,我们保存的图片就在该文件夹的真实路径下,但是在项目中是无法看到上传的图片的 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载
注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架Server ...
- HttpSession与Hibernate中Session的区别
一.javax.servlet.http.HttpSession是一个抽象接口 它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户 ...
- 和transformjs一起摇摆
写在前面 记得以前facebook做过一款HTML5游戏.开场动画是一块软体类似豆腐的东西一起摇摆.类似的效果如下面的gif所示: facebook当时使用的是createjs下的子项目easeljs ...
- ArcGIS Engine开发之地图基本操作(3)
地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...
- iOS之UI组件整理
作者:神兽gcc 授权本站转载. 最近把iOS里的UI组件重新整理了一遍,简单来看一下常用的组件以及它们的实现.其实现在这些组件都可以通过Storyboard很快的生成,只是要向这些组件能够变得生动起 ...
- Android Weekly Notes Issue #222
Android Weekly Issue #222 September 11th, 2016 Android Weekly Issue #222 ARTICLES & TUTORIALS Fo ...
- Android Weekly Notes Issue #219
Android Weekly Issue #219 August 21st, 2016 Android Weekly Issue #219 ARTICLES & TUTORIALS Andro ...
- 下载本 WebEnh博客 安卓APP
暂时还在学习开发安卓和苹果APP应用,写得一般,以后会更新的,谢谢大家关注.对了这个是用HTML5+写的哦.不太难,但是要搞懂还是要多花点时间了,有时间就会更新的 ... ...