正 文

用悲观锁定来解决ADO.NET并发性问题


www.7dspace.com  更新日期:2005-11-28 2:18:18  七度空间


测试应用程序

为了测试应用程序,请编译它并运行它的两个实例。单击两个实例上的Fill按钮。在应用程序的第二个实例中,修改一个值并单击Update按钮。返回应用程序的第一个实例,编辑一个不同的字段来更改相同的记录,再单击Update按钮。

在应用程序的第一个实例中进行的更新将会成功,因为它持有记录锁。第二个实例只是显示一条错误消息,表明它成为死锁情况下的牺牲品。还可启动应用程序,单击Fill按钮,再尝试用另一种方法来更新记录,比如使用SQL Server的Query Analyzer。只要Fill按钮是在Query Analyzer运行一个SQL查询之前单击的,Query Analyzer就会被迫等待,在锁被移除之后才能执行查询。

一些警告

如前所述,考虑到性能,通常应尽量避免悲观锁定。但某些情况下,却可能需要它。如同本文所展示的,在ADO.NET中执行悲观锁定的代码是相当简洁的。

如果必须使用悲观锁定,应尝试快速更新记录并结束打开的事务处理,保证记录锁只存在尽可能短的时间。任何情况下,都不应在事务处理打开的同时,等待来自用户的某些操作。本文的示范应用程序之所以违反了这一规则,只是为了演示之用途。用户极有可能在更新途中离开计算机,让记录锁定数小时乃至数天之久。相反,应该以程序化的方式,在单独一个步骤中,让更新从记录中将锁移除。

3页,页码:[1] [2] [3] 

上一篇:数据网格之深入研究:分页和删除
下一篇:在使用.NET字符串时保留系统资源
作者:周靖 译  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐