专著于富媒体技术~
本站某些作品来源于互联网,如果侵犯了您的利益,请留言说明!
本站某些作品来源于互联网,如果侵犯了您的利益,请留言说明!
[此文来源于互联网,牛C网只负责收集整理]
在ADO( )数据访问的时候,MS曾经在其出版的书籍中强调过(有可靠证据),尽量不要使用使用DataSet访问对象,而是使用IDataReader这个只读的向前的记录集访问,的确,这是有一定的道理的,DataSet是把数据集先置于内存中,然后告诉缓存起来,断开连接,IDataReader是直接读取的.
在数据量较少的情况下,DataSet和IDataReader的优劣并没有非常明显的优劣,然而,当数据流量达到一定量(200条左右),这和您的计算机的硬件配置有关,IDataReader的优势就很明朗了.
在访问数据量较多的时候,如果您热衷于使用IDataReader读取数据库,那么,以下的一个问题是很明显的,如果线路阻塞,记录异常关闭,线路突然中止,这时候就数据库服务器中闲置了一条任何程序都无法再利于的线程-资源泄漏了.曾经,可以时候Close关闭链接池的,但,难道要每次DataBind完毕了操作这个么?如果DataBind失败,而您又使用了Catch语句,那这个线路又闲置了.根据本人的经验,在WinApp的开发中,.Net所限制的线路最大的pool是21,在Web开发中,更少,4条抑或更少.
这里介绍一种方法,使用Delegates关闭,使用委托的优势就是自动关闭,每次完毕,自动激发这个委托.
注意到handler(rdr);这是引发委托的语句.
页面使用的时候:
以上文章参照这里.
稍等.
在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);
}
}
}
}
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();
}
}
{
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();
}
}
以上文章参照这里.
稍等.
作者:gdgzboy@牛C网
地址:http://www.niuc.net/post/1442/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
牛C网推荐您再看看以下日志:
ASP.NET实现简单的文字水印
ASP.NET中Session的状态保持方式浅议
简单介绍dotnet3.0 中跨线程访问控件
在ASP.NET中实现Url Rewriting
用asp.net实现将上传的图片变小存入数据库
运用 ADO.NET 对象优化数据查询代码
asp.net实现C#代码加亮显示
捕捉DataGrid的双击事件(C#版本)
.NET设计模式研究之装饰模式
将图片插入数据库并使用asp.net读取出来的正确方法
ASP.NET实现简单的文字水印
ASP.NET中Session的状态保持方式浅议
简单介绍dotnet3.0 中跨线程访问控件
在ASP.NET中实现Url Rewriting
用asp.net实现将上传的图片变小存入数据库
运用 ADO.NET 对象优化数据查询代码
asp.net实现C#代码加亮显示
捕捉DataGrid的双击事件(C#版本)
.NET设计模式研究之装饰模式
将图片插入数据库并使用asp.net读取出来的正确方法
上一篇



