将数据一次性加载到DataSet与逐行从DB内读取的性能比较

在开发中经常会遇到将当前处理批次的数据与数据库内的数据做校验的情况,通过有两种处理方式:

1、将待校验的数据一次性加载到DataSet,再将待校验的数据与DataSet内的数据逐行比较。

2、待校验数据在使用时,才从DB取出那一条数据进行比对。

第一种方法要每次在DataSet中查找数据,第二种直接定位到具体数据,两种方式在数据量为20W条记录的,第一种的处理时长是第二种的10倍。

        string strConnect = "Data Source=localhost;Initial Catalog=cmsw;Integrated Security=True; Application Name=pgq";
        DataSet dsCode = new DataSet();
        using (SqlConnection sqlConn = new SqlConnection(strConnect))
        {
           sqlConn.Open();
           SqlDataAdapter sda = new SqlDataAdapter("SELECT top 200000 TRANCODE from JobRecord  ", sqlConn);
           sda.Fill(dsCode, "Test");
           sqlConn.Close();
        }

        DateTime dt1 = DateTime.Now;

        foreach (DataRow dr in dsCode.Tables[0].Rows)
        {
           using (SqlConnection sqlConn = new SqlConnection(strConnect))
           {

               string code = dr["TRANCODE"].ToString();
               SqlCommand cmd = new SqlCommand("SELECT *  from JobRecord  WHERE [email protected] ", sqlConn);
               cmd.Parameters.AddWithValue("TRANCODE", code);
               sqlConn.Open();
               SqlDataReader dataRead = cmd.ExecuteReader();
               if (dataRead.Read())
               {
                   Console.WriteLine("One Cycle:{0}",dataRead["TRANCODE"]);
               }
               sqlConn.Close();
           }
        }
        DateTime dt2 = DateTime.Now;
        TimeSpan ts1 = dt2 - dt1;
        Console.Clear();

        Console.WriteLine("Total MilSeconds:{0}", ts1.Milliseconds);

        DataSet dsTest2 = new DataSet();
        using (SqlConnection sqlConn = new SqlConnection(strConnect))
        {
           sqlConn.Open();
           SqlDataAdapter sda = new SqlDataAdapter("SELECT top 200000 * from JobRecord  ", sqlConn);
           sda.Fill(dsTest2, "dsTest2");
           sqlConn.Close();
        }
        int serialNo = 0;
        while (serialNo < 200000)
        {
           Random rand = new Random();
           int index = rand.Next(1, 200000);
           var code = dsTest2.Tables[0].AsEnumerable()
               .Where(r => r.Field<string>("TRANCODE") == dsCode.Tables[0].Rows[index]["TRANCODE"].ToString())
               .Select(r => r.Field<string>("TRANCODE")).ElementAtOrDefault(0);
           Console.WriteLine("Scend Cycle:{0}",code);
           serialNo++;
        }

        DateTime dt3 = DateTime.Now;
        TimeSpan ts2 = dt3 - dt2;
        Console.WriteLine("First Result, TotalSeconds:{0};\r\nSecond Result TotalSeconds:{1}", ts1.TotalSeconds, ts2.TotalSeconds);
        Console.ReadLine(); 

原文地址:https://www.cnblogs.com/todayhero/p/DataBase.html

时间: 2024-07-30 02:48:49

将数据一次性加载到DataSet与逐行从DB内读取的性能比较的相关文章

IOS数据懒加载

懒加载,又称为延迟加载.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载资源,只有在运行当需要一些资源时,再去加载这些资源. 我们知道iOS设备的内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么就有可能会耗尽iOS设备的内存.这些资源例如大量数据,图片,音频等等 下面举个例子: 1> 定义控件属性,注意:属性必须是strong的,示例代码如下: @property (nonatomic, strong) NSArray *imageList; 2>

b/s和C/S方法用C#递归方法把数据表加载到treeview控件中

先看一下数据库的结构: 表结构如下所示: Num                   Name                                 fatherNum       BZ 01                      总节点                                      0              ...... 0101                   第一个一级节点                          01      

JS实现-页面数据无限加载

在手机端浏览网页时,经常使用一个功能,当我们浏览京东或者淘宝时,页面滑动到底部,我们看到数据自动加载到列表.之前并不知道这些功能是怎么实现的,于是自己在PC浏览器上模拟实现这样的功能.先看看浏览效果: 当滚动条滚动到页面底部时,提示“正在加载…”. 当页面已经加载了所有数据后,滚动到页面底部会提示“数据已加载到底了”: 实现数据无限加载的过程大致如下: 1.滚动条滚动到页面底部. 2.触发ajax加载,把请求返回的数据加载到列表后面. 如何判断滚动条是否滚动到页面底部?我们可以设置一个规则:当滚

ArcGIS Engine中数据的加载 (转)

1.加载Shapefile数据 1 IWorkspaceFactory pWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFeatureLayer pFeatureLayer; 4 5 //获取当前路径和文件名 6 OpenFileDialog dlg = new OpenFileDialog(); 7 dlg.Filter = "Shape(*.shp)|*.shp|All Files(*.*)|*.*"; 8

WinForm ListView虚拟模式加载数据 提高加载速度

将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式.控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualItem(Occurs when the ListView is in virtual mode and requires a ListViewItem.)和CacheVirtualItems两个事件,单独使用RetrieveVirtualItem也可以,CacheVirtualItems这个事件主要是

省市数据递归加载到TreeView

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace 省市数据递归加载到TreeView { public

smartjs - DataManager 场景示例分析 - 数据懒加载

发一张policy的参数图设置图: 场景1 - 数据的懒加载/延迟加载 在很多时候,为了提高网页的加载速度,减少不必要的开销,会将页面的数据拆分成几个部分,首先加载呈现可视区域内的数据,然后剩下来的会在需要的时候在进行加载. 而这种按需加载的数据又分为两种: 1.按照需要进行加载:可以是由某个动作触发来引起,比如:tab,查看更多等: 2.采用缓存的方式:对后续动作的预知,提前将后续的数据加载进来,放入到缓存中:等需要的时候能提供快速的响应:比如:很多igrid的滚动分页 那么来看一下在data

安卓中实现界面数据懒加载

大家在使用手机新闻客户端的时候就会有一个发现,大多数的新闻客户端都会把新闻分类,诸如头条.娱乐.体育.科技等等,如何实现这种界面的呢?这个实现起来其实很简单,就是在一个Fragment中实现多个ViewPage的切换,再在ViewPage的上面放一个TabLayout,关联起来就可以实现联动效果.如果大家感觉不太明了的话,以后我可以专门写一篇关于Fragment中放入多个ViewPage的博客,今天,我主要介绍的是怎样实现界面即Fragment的懒加载.那么,大家就会奇怪了既然是加载界面直接加载

GreenPlum 使用gpload通过gpfdist文件实现数据高速加载

1,gpload环境准备 环境准备请参考博主以前的文章gpfdist部署实战:http://blog.csdn.net/mchdba/article/details/72540806  ,安装好gpfdist后,gpload也自动有了,可以自动使用. 安装完后,可以启动gpfdist服务:nohup /data/greenplum/bin/gpfdist -d /data/greenplum/ -p 8090> /home/gpadmin/gpfdist.log  & 2,gpload简介