知识大全 使用ADO.NET2.0提升数据交互性能(2)

Posted

篇首语:不飞则已,一飞冲天;不鸣则已,一鸣惊人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用ADO.NET2.0提升数据交互性能(2)相关的知识,希望对你有一定的参考价值。

使用ADO.NET2.0提升数据交互性能(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

三 异步执行Command命令   在 ADO NET 以前 通过 Command 类(如 SqlCommand OleDbCommand等)执行 SQL   命令的线程一定要停下来等待执行结果 ADO NET 新增了异步程序访问接口(asynchronous API) 让线程发出命令后可以继续执行接下去的程序代码   而在 ADO NET 当前的版本只有 SqlClient 支持异步程序访问接口   以往编写程序时 我们可以直接通过 NET Framework 所提供的多线程机制 或是以 Delegate 类包装多线程的方式 在 NET Framework 所提供的异步架构下 设计调用执行 Command 对象实例 这些方法都是让一条工作线程(Worker Thread)停止在后台中等待执行结果 一旦有结果后 工作线程再通过标准的机制告知结果   原本 ADO NET 的 Command 对象执行 SQL 语法的方法有   ExecuteReader ExecuteNonQuery ExecuteXmlReader 以及 ExecuteScalar 等 搭配 NET   Framework 原来就提供的异步模型惯例 除了 ExecuteScalar 方法外 其余的方法都新增了以 Begin 和 End 关键字开始的一对方法 也就是说 ExecuteReader 方法是同步执行 若要以异步的方式执行相同的功能 则调用 BeginExecuteReader 和 EndExecuteReader 这一组方法 在 NET Framework 中 以 Begin 为字首的方法负责传入同名方法所需的参数 而以 End   为字首的方法用来取回执行结果   例如某个方法的定义如下   public override int ExecuteNonQuery()   则以异步调用的起始方法定义如下   public IAsyncResult BeginExecuteNonQuery(AsyncCallback callback object stateObject)   Begin~ 系列的方法会多加存放回调方法(Delegation)的指针参数 也就是上述语法中的 callback 参数 并提供语法中的 stateObject参数 让你设置想要带到 End~ 对应方法的信息 而 Begin~ 系列方法最后返回的是代表异步执行状态的 IAsyncResult 对象实例 而不是原本同步执行方法的返回结果 你可以借此查询异步执行的状况   而获得执行结果的方法定义如下   public int EndExecuteNonQuery(IAsyncResult asyncResult)   在调用与 Begin~ 对应的 End~ 方法时 需要带入 Begin~ 方法所返回的 IAsyncResult   对象实例 异步执行完毕后 取回与原先同步执行方法相同的执行结果   由于我们在执行完 Command 对象访问数据库的方法后 都会返回对象 如 ExecuteReader 取回 DataReader实例 ExecuteNonQuery 取回受影响的记录条数 ExecuteXmlReader 取回 XmlReader 实例 因此大概都需要通过End系列方法来获得执行结果 否则这些结果就遗失在系统中   若要异步执行 Command 命令 另一个必需设置的是 数据库连接字符串内要加上 async=true 属性 若连接字符串没有加上该属性 而通过 Command对象实例调用异步执行的方法 则会产生异常(exception) 若 Command 通过连接执行时 重头到尾都是以同步的方式执行 则依照默认 async=false 的方式设置比较节省资源 若某些命令需要同步执行 另一些需要异步执行 则可以考虑使用不同的连接   在介绍范例应用程序前 我们先稍微谈一下 NET Framework 所提供的公共的异步运行应用程序设计模式 不只是 ADO NET 在其他访问耗时的程序编写上 也都可以套用这个模式   NET Framework内置了让应用程序异步运行的功能 让你在编写应用程序时 不会因为某些耗时等待的操作让程序停止响应 操作界面停滞让用户感觉起来好像死机一样 一般会以多线程的方式处理这种需求 但若你不熟悉线程的运行 或是想利用线程池(Thread Pool)的好处 都可以在较为耗时的操作上 采用 NET Framework 所提供的异步功能   一般来说文件 I/O 网络访问乃至于 Web Services 访问 以及本节所讨论的 DB 访问等都较为耗时 NET Framework为这一类的类都提供了上述以 Begin~/End~开头的非同步执行方法 而这些方法皆成对出现 当然 也有可能是自己编写的方法其商业逻辑非常复杂 导致调用该方法后 需要等待一段时间来完成 这时还可以通过 NETFramework 所提供的委托(Delegate)类来创建异步运行   但是实际在我们的应用中     但我们不需要获知DB服务器的返回信息时 我们推荐使用委托 尤其是在Web开发中   因为在页面线程启动异步数据库访问时 当页面业务执行完毕后仍然无法放开访问数据库的异步线程 这是我们不希望看到的 但是使用委托却可以避免这个麻烦(webservice异步应用中一样如此) cha138/Article/program/net/201311/13138

相关参考

知识大全 使用ADO.NET2.0提升数据交互性能(1)

使用ADO.NET2.0提升数据交互性能(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 在 ADO.NET2.0 中对于从您的数据源访问元数据

在ADO.NET2.0中对于从您的数据源访问元数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 ADO.NET 2.0 数据异步处理改善用户体验

ADO.NET2.0数据异步处理改善用户体验  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  支持

知识大全 ADO.NET2.0的十大新特性全面介绍

ADO.NET2.0的十大新特性全面介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文简要

知识大全 详解MySQL数据库提升性能的八种方法[2]

详解MySQL数据库提升性能的八种方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用

知识大全 ADO.NET 2.0中的DataSet和DataTable

ADO.NET2.0中的DataSet和DataTable  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ADO.NET 2.0 动态指定 ObjectDataSource 的 SelectMethod

ADO.NET2.0动态指定ObjectDataSource的SelectMethod  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布

知识大全 经测试ADO.NET 2.0竟然比1.0要慢

经测试ADO.NET2.0竟然比1.0要慢  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  镜子里

知识大全 详解MySQL数据库提升性能的八种方法[1]

详解MySQL数据库提升性能的八种方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选取

知识大全 .Net中掌握Windows窗体间数据交互(2)

.Net中掌握Windows窗体间数据交互(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!