文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++C# IDataReader造成的资源泄漏
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
热点TOP10
·C#基础概念二十五问
·C语言编程易犯毛病集合
·进程和线程编程
·Awk 基础入门:Awk 实例编程
·打字游戏
·C++ Builder 初学问与答(五)
·asp.net中调用javascript函数实现多功能日期控件示例
·C语言编程常见问题解答之常用函数的包含文件(1)
·C# GridView 排序及分页
·C #中的几个线程同步对象方法

C# IDataReader造成的资源泄漏

日期:2007年9月15日 作者: 查看:[大字体 中字体 小字体]


  在ADO(+)数据访问的时候,MS曾经在其出版的书籍中强调过(有可靠证据),尽量不要使用使用DataSet访问对象,而是使用IDataReader这个只读的向前的记录集访问,的确,这是有一定的道理的,DataSet是把数据集先置于内存中,然后告诉缓存起来,断开连接,IDataReader是直接读取的.
  在数据量较少的情况下,DataSet和IDataReader的优劣并没有非常明显的优劣,然而,当数据流量达到一定量(200条左右),这和您的计算机的硬件配置有关,IDataReader的优势就很明朗了.
  在访问数据量较多的时候,如果您热衷于使用IDataReader读取数据库,那么,以下的一个问题是很明显的,如果线路阻塞,记录异常关闭,线路突然中止,这时候就数据库服务器中闲置了一条任何程序都无法再利于的线程-资源泄漏了.曾经,可以时候Close关闭链接池的,但,难道要每次DataBind完毕了操作这个么?如果DataBind失败,而您又使用了Catch语句,那这个线路又闲置了.根据本人的经验,在WinApp的开发中,.Net所限制的线路最大的pool是21,在Web开发中,更少,4条抑或更少.
  这里介绍一种方法,使用Delegates关闭,使用委托的优势就是自动关闭,每次完毕,自动激发这个委托.

  
public class DBComponent{
    public delegate void IDataReaderHandler(IDataReader reader);
    public static void GetAuthor(string authorID,IDataReaderHandler handler){
    using(SqlConnection conn=new SqlConnection("server=.;Trusted_Connection=True;DATABASE=pubs")){
       SqlCommand command=new SqlCommand("select * from class where [id]=@ID",conn);
       command.Parameters.AddWithValue("@ID",authorID); 
       conn.Open();

       using(SqlDataReader rdr=command.ExecuteReader(CommandBehavior.CloseConnection)){
        handler(rdr);
       }
    }
    }
}

注意到handler(rdr);这是引发委托的语句.

  页面使用的时候:
public class WebForm1 : System.Web.UI.Page
{
 protected System.Web.UI.WebControls.DataGrid DataGrid1;


 private void Page_Load(object sender, System.EventArgs e){

  if(!IsPostBack)
   DataComponent.GetAuthor("172-32-1176",new DataComponent.IDataReaderHandler(BindGrid)); 
 }

 private void BindGrid(IDataReader reader)
 {
  DataGrid1.DataSource = reader;
  DataGrid1.DataBind();
 }
}
  以上文章参照这里.
  稍等.
[1] [2] 下一页 




上一篇:实例指导:开发.NET程序注意事项

下一篇:在.NET中字符串替换的五种方法

相关文章:
·网上英语学习资源大整理
·视频下载不求人 突破封锁保存各类视频资源
·微软提供Office 2003资源套件工具下载
·易载ezPeer,资源无限分享
·VB 中资源文件的多种使用技巧
·网络资源之中国古典乐器
·自慰会不会造成处女膜破裂
·Windows 2003共享资源拒绝访问修复实录
·用独立的DLL来存储图片(资源文件)
·Windows Vista中Aero是资源黑洞吗?
相关软件:
·大英百科全书2006顶级资源中心版
·帝国时代II:征服者 所有资源修改器
·人力资源管理(吉林大学 马克立)
·PE(*.EXE,*.DLL,*.OCX等)文件图像资源浏览器
·我要论坛资源网整站程序
·佳宜人力资源管理软件 V2.35 单机版
·人力资源管理考试百宝箱 V3.0
·天猴人力资源管理系统 V2.0
·人力资源岗位职责表
·经济师题库 人力资源专业 V1.1

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot