本站联系方式
   联系QQ  :1095080675
   联系QQ  :1223950575
  技术指导:1353934434
  
  电子邮箱:1095080675@qq.com
标题  提高ADO.NET应用程序性能的研究
编号  12150
编程语言  ASP.NET, C#
开发环境  Visual Studio 2005 或 2008
数据库  SQL Server 2000
资料明细  论文、程序
推荐指数  ★★★★★
内容介绍

1. 提高 ADO.NET性能的一般方法
如何提高系统的性能, 关键的是系统设计。 设计上性能的考虑, 其影响可能会十倍于未来对系统性能其他方面的调整。 传统上, 应用程序一般创建为两层体系结构, 其中包含用户接口(UI)和后台数据存储(通常为数据库)。 在两层应用程序中, 或者将业务逻辑置于 UI 代码之中, 或者将它置于数据存储之中。就体系结构而言, 也可以使用 ADO来创建多层的数据库应 用, 因为多层次的应用程序能够更好地实现分布式应用, 所以n层体系结构具有更高的灵活性, 从而能够提供更高的伸缩性。 但 性能并不是层数越多越好, 从简单的角度来讲, 其实层数越少其性能是越好, 但系统扩充性、 可维护性较差。 在实际应用, 究竟是 使用采用两层的 C/S, 还是采用三层的 WEB 应用, 还是多层的结构, 必须平衡两方面的因数, 一般根据应用的需求来确定不同 的数据访问方式。 除系统设计上的考虑外, 在程序设计中要考虑以下几个方面:
1. 数据缓存, 避免不必要的操作, 减少应用程序与数据服务器之间的数据往返。
2. 由于在实际应用中, 其业务量很大, 只有当需要的时候才进行连接, 在不需要的时候就释放连接, 以便其他应用使用。在系统中资源不使用时, 尽快关闭。
3. 如果要从后台数据库中提取数据, 也只能返回所需要的数据, 即减少数据流量, 并可以减少本地数据的缓存。
4. 在应用程序的开发中, 常常使用各种事务, 包括数据库的事务、 ADO.NET的事务功能、 COM+的分布式事务, 要根据不同 的情况选择不同的事务类型。
5. 存储过程对性能有很大的帮助, 尽量使用存储过程。
2. 提高 ADO.NET 访问数据性能的具体方法
1. 选择合适的数据提供程序
.NET框架中的数据提供程序(Data Provider)在应用程序和数据源之间起到桥梁作用。 为了使应用程序获得最佳性能, 使用 最适合数据源的.NET框架数据提供程序。
如果连接到 Microsoft SQL Server 7.0 或更高版本, 由于 SQL Server .NET Data provider 是直接访问 DB NETLIB , 访问数据库 的效率高, 所以使用 SQL Server .NET数据提供程序。而 OLE DB .NET Data provider, ODBC .NET Data provider、 NET Data provider for Oracle 要通过 OLEB的转换, 这时其性能相对来讲要受到一定的影响。
在实际应用中, 可能不知道后台数据库是什么, 如何实现应用能应对不同的数据库接口, ADO.NET1.0 需要编写代码, 使用 接口来实现在数据库的无关性。ADO.NET2 使用数据库无关的抽象类与接口, 并提供"DBProviderFactoy"类来获取相应数据提供者。
2. 数据库连接
高性能应用程序与使用中的数据源应保持最短时间的连接, 打开和关闭数据库主要有以下几个方面:
( 1) 打开和关闭数据库连接的时机
使用打和关闭连接时, 不要在构造函数或析构函数中进行,最好在方法中进行。 在很多的情况下, 如果在构造函数或析构函 数中打开和关闭连接, 其连接的状况是不确定的, 这与垃圾回收机制有关, 大多数在情况下, 并没有关闭连接, 因为析构函数是 由垃圾回收线程来调用, 垃圾回收只有在内存不够的时候才调用, 这样, 应用程序虽然释放了其连接, 但系统没有释放连接对 象, 连接就会一直保持, 在应用中就有存在垃圾对象, 这对系统的性能有很大的影响。
( 2) 选择适当的身份认证方式
( 3) 连接池
对性能最大的改善是使用连接池, 特别在分布式系统中。 通过在连接字符串中指定不同的属性值, 可以控制连接池的行为。 conn.ConnectionString="Server=localhost;integrated Security=SSPI;Database =Northwind; Maxpool size =75;Min Pool Size =5;Poolin=true;"
参数的设置是根据系统的需求情况的一个经验值, 如果希望 SERVER 请求处理的速度更快, 可以将 Min poolSize 的值设 置较大一些; 如果希望减轻 SERVER 端的压力的话, 可以设置将 Max PoolSize 设置较小一些; 如果 SERVER 中有多个应用, 可 以调整连接池的 Max poolSize 来调节应用的优先级。
( 4) 始终关闭 Connection 和 DataReader
连接是一种资源, 必须明确的关闭连接。完成对 Connection或 DataReader 对象的使用后, 总是显式地关闭它们。 没有显式关 闭的 Connections 可能不会返回到池中, 尽管垃圾回收最终会清除对象并因此释放连接和其他托管资源, 但垃圾回收仅在需要 时执行, 因此, 必须确保资源被显式释放。
当使用 DataReaders 时, 在指令行为中可以设置为 ConmmandBehavior.CloseConnection。 当指令一旦结束时自动将连接关闭。
( 5) 用 DataAdapter 优化连接
DataAdapter 会自动的打开和关闭连接, 而 Command 对象需要手动打开和关闭连接。DataAdapter 的 Fill 和 Update 方法在 连接关闭的情况下自动打开相关命令属性指定的连接。为了获得最佳性能, 仅在需要时将与数据库的连接保持为打开。同时, 减少打开和关闭多操作连接的次数。
如果只执行单个的 Fill 或 Update 方法调用, 建议允许 Fill或 Update 方法隐式打开和关闭连接。 如果对 Fill 和 Update 调用 有很多, 建议显式打开连接。调用 Fill 和 Update 后显式关闭连接。当执行事务时, 显式地在开始事务之前打开连接, 并在提交之后关闭连接。
( 6) 避免访问 OleDbConnection.State 属性
3. SQL指令
仅返回需要的行和列, 如果数据集较大, 对大的数据集使用分页功能, 如果要执行多条 SQL语句, 可以采用批次执行 SQL, 减少往返。 使用 DataRead 的 NextResult()方法读取下一个数据集中的数据。
如果返回像 Count(*)、 Sum(Price)或 Avg(Quantity)的结果那样的单值, 可以使用 Command.ExecuteScalar。ExecuteScalar 不仅 简化了代码, 还提高了性能。
使用不返回行的 SQL 语句时, 或仅返回输出参数或返回值, 使用 ExecuteNonQuery。这避免了用于创建空 DataReader 的 任何不必要处理。在使用 SQL语句时, 考虑使用 Command.prepare(), 即在后台做一个编译, 并把它保存起来, 这样, 在运行应 用程序时, SQL只是执行, 提高其性能。尽可能使用输出参数, 得到一个返回值, 然后使用该值。
设置 SET NOCOUNT ON, 关闭 SQL语句执行的统计功能,提高其执行的速度。
4. 尽量使用存储过程
5. DataReader 和 DataSet
6. 根据实际情况选择合适的事务。

说明
 以上是论文部分内容。如果对以上内容感兴趣,可以QQ:1095080675或邮件1095080675@qq.com继续联系我们。
相关文章
  • 旅游信息系统的设计与实现
  • 软件资源复用管理系统
  • 实验室设备管理系统
  • 数据存储与交换系统的设计(网络硬盘)
  • 文章导航
  • 上一篇:基于Web数据库的远程考试系统
  • 下一篇:基于ASP.NET实现的在线考勤系统