• 休闲生活
  • 教育教学
  • 经济贸易
  • 政法军事
  • 人文社科
  • 农林牧渔
  • 信息科技
  • 建筑房产
  • 环境安全
  • 当前位置: 达达文档网 > 达达文库 > 人文社科 > 正文

    NET基于两层的SqlDataSource和基于三层的ObjectDataSource的数据插入和更新的性能对比研究

    时间:2020-09-18 07:56:28 来源:达达文档网 本文已影响 达达文档网手机站

    【摘要】本文首先介绍了SqlDataSource和ObjectDataSource的相关层次结构及两个控件的主要用途,然后概述了SqlDataSource的主要功能,最后通过完成了SqlDataSource和ObjectDataSource的数据插入和更新的性能对比试验,通过实验对比两个控件的性能,并对试验结果进行分析,从而为研究人员和企业级的应用人员在项目开发中根据实际需要,选择最高效和最有用的控件时提供参考。

    【关键词】SqlDataSource;ObjectDataSource;层次结构;表示层

    一、SqlDataSource控件和ObjectData Source控件的相关层次结构

    两层应用程序层次结构是指应用程序的表示层(如ASP.NET网页)可以与其数据层(如数据库、XML文件等)直接进行通信。表示层用来把数据呈现给用户,主要处理界面元素;而数据层集中处理数据的插入、更新、存储、查询等功能。大多数ASP.NET数据源控件都是两层应用程序层次结构,比如SqlDataSource,它的两层分别是表示层和数据层。

    两层应用程序层次结构本身有很多优点,使用也能方便,比如它降低了网络上的信息流量,也将服务器的一些工作压力转移给了客户端,但是缺点也很明显,主要表现为:第一,当系统因需求变化需要改变数据结构时,表示层往往要经过非常大的修改,此时系统越大,表示层的修改量就越大,即使一个表结构的微小变动也会导致表示层多个模块的修改。第二,两层应用程序层次结构在分析设计阶段和代码编写阶段对每个开发人员的要求都非常高,系统的每个开发人员不但要熟练掌握编程语言和开发环境,而且还要对需要开发的系统有很深的了解。第三,两层应用程序层次结构的数据层通常都是在一台服务器上,服务器的负荷还是比较重。但是在企业级的应用中,实际常用的应用程序设计原则却需要将表示层与业务逻辑相分离,所以原有的两层应用程序层次结构在理解和设计上略显不足,于是出现了三层应用程序层次结构。

    三层应用程序层次结构是指应用程序被分成了表示层、中间层(如封装业务逻辑的层)、数据层,三个层协同工作,来完成应用程序的功能,比如ObjectDataSource,它可用作数据控件(如GridView、FormView或DetailsView控件)的数据接口,允许以声明方式将数据绑定到由自定义业务对象公开的数据,以用于多层Web应用程序结构,这正是三层架构甚至N层架构所需要的。中间层是由于应用程序在设计的时候,业务逻辑常常不是封装在表示层中,而是将业务逻辑从表示层中分离出来,并将业务逻辑封装在业务对象中,于是这些业务对象在表示层和数据层之间形成了中间层,进而生成了一种三层应用程序结构。

    三层应用程序层次结构的优点主要体现在以下几个方面:第一、应用程序的模块化程度更高。第二,各个层的软硬件资源得到了更有效更合理的利用,因为它将三层的工作负荷合理地分配到了多台计算机上。第三、当系统的需求发生变化时,只需要增加或者修改对象的相关属性和操作就可以完成任务,这大大提高了系统的灵活性[1]。

    二、SqlDataSource控件和ObjectData Source控件的主要用途

    SqlDataSource控件是两层模型中使用的,其页面是直接访问数据库的。也就是说,其表示层(ASP.NET网页)可以与数据层(数据库和XML文件等)直接进行通信。如果是两层模型且数据存储在SQL Server、SQL Server Express、Oracle Server、ODBC数据源、OLE DB数据源或Windows SQL CE数据库中,就应使用SqlDataSource控件。

    ObjectDataSource控件用于三层模型中,它的页面通过中间业务对象访问数据库。它将表示层与业务逻辑相分离,而将业务逻辑封装在业务对象中,这些业务对象形成了中间层,ObjectDataSource通过提供一种将相关页上的数据控件绑定到中间层业务对象的方法,为三层结构提供支持。在不使用扩展代码的情况下,ObjectDataSource使用中间层业务对象以声明方式对数据库进行操作。

    三、SqlDataSource控件的主要功能

    SqlDataSource控件的主要作用是将基于SQL的关系数据库中的数据呈现给与其绑定的数据控件,由于这种呈现方式使用的是ADO.NET类,因而它可以访问和操作ADO.NET所支持的任何数据库。通常情况下,SqlDataSource一般访问和操作的关系数据库和数据源主要包括Microsoft SQL Server、Oracle数据库、OLE DB和ODBC数据源中的数据,SqlDataSource通过ProviderName属性的值区分这些数据源,比如如果连接的是OLE DB或ODBC,则可以分别将SqlDataSource控件的ProviderName属性设置为System.Data.OleDb或System.Data.Odbc[2]。SqlDataSource的功能非常强大,主要体现在以下个方面:

    1、SqlDataSource可以在页面中访问和操作数据,而无需直接使用ADO.NET类。

    2、在运行时,SqlDataSource控件会自动连接数据库,执行SQL语句或存储过程,返回数据,然后自动关闭连接。

    3、SqlDataSource与数据绑定控件一起使用,可以方便地在网页上显示和操作数据。

    4、当SqlDataSource需要与数据源进行连接时,除了需要通过ProviderName属性对数据源进行设置外,还需提供用于连接数据源的连接字符串,并定义使用数据的SQL语句或存储过程。

    5、连接字符串的传入有两种方式,一种是将连接字符串设置为SqlDataSource控件的ConnectionString属性值,从而传入连接数据源所需的信息。另一种方式是不将连接字符串直接传给ConnectionString属性,而是在应用程序配置文件web.config中的connectionStrings配置元素下单独配置连接字符串,从而将该配置元素的全部连接字符串作为配置文件的一部分进行保存,这种配置方式不但避免了在页面的源代码中处理连接字符串,而且可以通过使用Protected Configuration对全部连接字符串进行加密处理。

    6、连接字符串的内容需要随着访问数据源类型的不同而进行相应的修改,比如如果是访问和操作数据库,连接字符串的内容需要包括服务器名称或者服务器的IP地址、数据库名称、数据库用户的身份验证等信息。

    7、SqlDataSource最常用的SQL命令有四个:InsertCommand、UpdateCommand、DeleteCommand和SelectCommand,他们的值可以是SQL语句,也可以是存储过程名。如果是存储过程名,还要将相应的命令类型值指定为StoredProcedure,比如将SelectCommandType的值设为StoredProcedure。

    8、SqlDataSource的这四个SQL命令可以带参数,也可以不带参数。如果命令要带参数,那么命令中就须包含其在运行时提供的值的占位符。比如:Select ID,Name From users Where City=@city.如果参数的值是在运行时从其他控件中或者是从查询字符串中获得或者是从其他地方传入参数值,那么就只需要使用参数对象就可以解决问题。需要注意的是,如果在执行Select命令时有一个参数值为null,那么就默认不返回任何数据且不引发异常,如果想修改此默认行为,只须让CancelSelectOnNullParameter的值为false即可。

    9、SqlDataSource这四个SQL命令的执行时间有以下几种情况:①数据源控件在调用其对应的Insert、Update、Delete或Select时执行这些命令。②可以通过显式调用数据源控件的Insert、Update、Delete或Select方法,以便数据源控件执行相应的命令。③调用数据源控件的DataBind方法或者调用绑定到数据源控件的asp.net页面时,将自动调用Select方法。④有些数据源控件是自动调用其对应的Insert、Update、Delete或Select方法的,比如GridView控件,对于这些数据源控件,既不需要显式调用其对应的Insert、Update、Delete或Select方法,也不需要显式调用DataBind方法。

    10、SqlDataSource可以返回DataSet或DataReader对象,默认情况下,它返回的数据格式是DataSet对象,如果想要指定返回的数据格式,只需要设置DataSourceMode属性即可。DataReader和DataSet这两种数据格式的区别主要在于功能和速度两个方面,DataReader是按顺序读取数据且是只能读取数据,但是速度相对DataSet要快,DataSet不用按顺序读取数据且可读可写,所以DataSet可以执行排序、分页、筛选、维护缓存等操作,但速度相对DataReader要慢。正是这些区别决定了这两种数据格式的用途,如果要在检索数据后对数据进行排序、分页、筛选、维护缓存,就可以选择返回DataSet。相反,如果只希望返回数据并且正在通过页面上的控件如DropDownList、ListBox或GridView对返回的数据执行显示操作,就选择返回DataReader。

    11、SqlDataSource提供了对它已检索数据的缓存功能,这种缓存功能由于避免了重复查询操作的巨大开销,因而大大提高了应用程序的性能,所以只要检索到的数据相对稳定,占用的系统内存不多,就应该使用缓存。但是默认情况下SqlDataSource不启用缓存。如果要启用缓存,只须让EnableCaching属性的值为true即可。缓存的时间单位默认是秒数,缓存时间可以通过CacheDuration属性进行设置。实际上,对于数据源的连接、选择命令、选择命令的参数和设置缓存的每一个组合,数据源控件在后台都管理着一个单独的缓存项。此外,SqlDataSource能够使用SQL Server数据库服务器的缓存依赖项功能,即如果连接的是SQL Server数据库,且SQL Server数据库的版本支持缓存依赖项功能,即一直保留缓存中的数据直到SQL Server报告在指定的表中直执行更改操作为止,这种缓存机制仅在必须获取最新数据时才再次执行数据检索操作,使用这种类型的缓存由于最大限度地减少了Web应用程序执行数据检索的次数,从而大大减少了数据检索的开销甚至重复进行缓存的开销,进而大大提升了数据访问的性能。

    12、SqlDataSource如果返回的是Data-Set对象,那么它就可以处理与其绑定的数据源控件的排序请求。

    13、如果SqlDataSource返回的是DataSet对象,而且SqlDataSource也已经启用了缓存,那么它就可以进行数据筛选操作,而不需要再次运行查询操作。它的FilterExpression属性可以指定数据源控件的数据的选择条件。当然也可以创建FilterParameters对象,以便在运行时为筛选表达式提供相应的值,从而完成对筛选表达式的参数处理。数据筛选操作也可以通过指定将用作SqlDataSource控件下的DataView对象的RowFilter属性的筛选器表达式完成。

    四、SqlDataSource和ObjectDataSource的数据插入和更新的性能对比试验及分析

    1、实验方案设计

    为了对SqlDataSource控件和ObjectData Source控件的数据插入和更新的性能进行研究,现在设计和完成一个试验,实验方案设计如下:

    首先,在同一台计算机上同时安装WIN-DOWS平台、SQL SERVER2008数据库数据库和.Net程序运行环境,同时卸载试验机的一切外部程序,这样不但可以避免计算机的硬件环境、操作系统、应用程序环境和网络状况等外部条件和软件环境对实验结果的影响,而且可以避免网络状况对实验结果的影响。

    其次,建立实验需要的数据库,并在其中建立表对象和用于处理数据的存储过程。

    第三,为了避免数据库中数据类型和数据的存放顺序对实验结果的影响,针对不同数据类型的升序数据和降序数据分别建立不同的表对象。

    第四,在.NET环境中分别完成用SqlData Source和ObjectDataSource对数据库中不同的表对象进行数据插入和数据更新的相关程序源代码,并完成代码的功能测试和压力测试。

    第五,按照实验条件开始实验,并分别记录SqlDataSource和ObjectDataSource的相关程序对不同数据类型的升序数据和降序数据执行数据插入和数据更新所需要的时间。

    第六,对实验结果进行数据分析和误差分析,并得出这两个控件在数据读取时的优劣性,通过比较两者的性能差距,并同时得出两者性能相同的临界值,即得出当一次处理的数据量达到多少时,能使SqlDataSource控件和ObjectDataSource控件的性能相等,这样在企业级应用中当一次执行插入或更新的数据量大于临界值时,就应该使用性能更优的控件,从而为研究人员、软件开发人员、项目设计人员和其他应用人员在基于性能选择使用SqlDataSource和ObjectDataSource控件时,提供重要的参考依据。

    2、实验结果

    由于采用降序数据和升序数据的实验结果类似,所以这里只列出了一种数据类型降序数据的实验结果。实验结果如下表所示(时间单位为秒)。

    3、实验结论

    从实验结果看,在.NET平台和SQL SERVER 2008数据库在同一台服务器上且当需要处理的数据条数在10万条左右时,SqlDataSource控件和ObjectDataSource控件的数据插入和更新时间几乎是相同的,甚至SqlDataSource还稍有优势,但当数据条数超过30万条时,ObjectDataSource的优势开始体现出来,但优势并不明显,仅在2%左右,特别是当数据条数超过45万条甚至60万条时,ObjectDataSource控件的数据插入和更新时间的优势才逐步有所体现,而且优势也不明显,仅在5%左右。尽管上述数据难以避免的存在误差,但不会影响实验结论的准确性。

    4、数据分析

    从实验数据看,在当前一般配置的装有WINDOWS系统和SQL SERVER2008的服务器中,当数据条数超过30万条时,ObjectDataSource控件的数据插入和更新的性能优势开始体现出来,但优势并不明显,甚至在数据条数达到60万条时,优势也只是在5%左右,尽管优势不大,但毕竟是有优势,这对于性能要求不高或者处理的数据量不大的应用程序,这种优势的意义并不重大,但对于性能要求较高或者数据插入更新的数据量较大且数据插入更新的较为频繁的应用程序,这种优势的意义却很重大,这一方面是因为大批量数据插入更新的越频繁,其累计效应就越明显,另一方面是因为随着需要处理的数据量的增加,SqlDataSource控件面临着操作超时甚至崩溃的风险。

    综上所述,在当前一般配置的装有WINDOWS系统和SQL SERVER2008的服务器中,虽然SqlDataSource控件和ObjectDataSource控件都可以进行数据库的数据插入和更新操作,但是在基于性能选择使用它们的数据插入和更新功能时,应该根据需要插入的数据量大小等因素进行选择,当需要处理的数据条数在10万条左右时,SqlDataSource控件和ObjectDataSource控件的数据插入和更新时间相差不大,使用哪个都可以,此时如果代码量不大,可以使用SqlDataSource控件,但如果要对应用程序进行更准确地控制,应该使用ObjectDataSource控件,因为ObjectDataSource是将业务逻辑封装在业务对象中,控制上更加方便灵活,但当数据条数超过30万条时,应该选择使用ObjectDataSource,因为此时它的性能优势开始慢慢体现出来,而且数据量越大优势越明显。

    参考文献

    [1]易学明,曹克虎,李强.面向对象的多层次结构开发模式[J].中国计算机报,2000(43).

    [2]SqlDataSource Web服务器控件概述[OL].http://msdn.microsoft.com/zh-cn/library/dz12d98w.

    作者简介:刘仲博(1973—),男,1994年获得陕西师大数学系理学学士学位,1997年通过自考获得西北政法学院法律本科,2006年获得西安电子科技大学计算机科学与技术工学硕士学位,宁夏职业技术学院、宁夏广播电视大学系统管理员。

    相关热词搜索: 两层 插入 性能 更新 数据

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网