问了半个月了,关于repeater控件绑定效率问题!来者有分!
aspx文件如下:
<TD>出版日期:<%# ((DataRowView)Container.DataItem)["chubanriqi"] %></TD>
<TD>出版日期:<%# ((DataRowView)Container.DataItem)["zuozhe"] %></TD>
<TD>出版日期:<%# ((DataRowView)Container.DataItem)["zishu"] %></TD>
<TD>出版日期:<%# ((DataRowView)Container.DataItem)["chubanshe"] %></TD>
<TD>出版日期:<%# ((DataRowView)Container.DataItem)["neirongjianjie"] %></TD>
cs文件如下:
OleDbConnection objConn=new OleDbConnection("Provider=sqloledb;Data Source=libaoli;Initial Catalog=huntbook_books;User Id=sa;Password=123;");
string strCommand = "select * from " + strDatabase;
OleDbDataAdapter objCommand=new OleDbDataAdapter(strCommand,objConn);
DataSet ds=new DataSet();
objCommand.Fill(ds);
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = ds.Tables[0].DefaultView;
objPds.AllowPaging = true;
objPds.PageSize = 4;
this.Label1.Text ="此类书籍共" + objPds.PageCount.ToString() + "页";
int CurPage;
if (Request.QueryString["Page"] != null)
CurPage=Convert.ToInt32(Request.QueryString["Page"]);
else
CurPage=1;
objPds.CurrentPageIndex = CurPage-1;
lblCurrentPage.Text = "当前页:" + CurPage.ToString();
if (!objPds.IsFirstPage)
lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);
if (!objPds.IsLastPage)
lnkNext.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage+1);
Repeater1.DataSource=objPds;
Repeater1.DataBind();
我数据库中的资料有6千条记录,当运行这个程序的时候,Repeater1.DataBind();这行要浪费4分钟时间,请问怎么绑定速度最快啊??????
问题点数:20、回复次数:19Top
1 楼guye99(沙洛)回复于 2006-05-01 16:13:40 得分 0
占位...Top
2 楼ycs0501(IT'BUG)回复于 2006-05-01 21:58:25 得分 0
好复杂呀
帮你upTop
3 楼jianyi0115(随意)回复于 2006-05-01 22:04:00 得分 0
6千条记录?你一次全部显示啊/?怎么不做分页/?/?/?Top
4 楼jianyi0115(随意)回复于 2006-05-01 22:06:03 得分 0
换用DataGrid试一试
<%# ((DataRowView)Container.DataItem)["chubanriqi"] %>
你这样写每行,每个字段都要做强制类型转换的,性能低的一个原因.Top
5 楼huntbookren()回复于 2006-05-01 22:10:33 得分 0
我必须用repeater,请问怎么解决这个问题!!Top
6 楼huntbookren()回复于 2006-05-01 22:13:16 得分 0
TO: jianyi0115
我已经作分页了,每页显示4条记录,上面的cs文件有主要实现代码。
请问我的程序为什么这么慢啊??Top
7 楼wyj10172002()回复于 2006-05-02 08:18:08 得分 0
用存储过程,Top
8 楼huntbookren()回复于 2006-05-02 10:33:23 得分 0
我写存储过程了,可是还是不行啊!
/*两个存储过程!
==================================================================================
//select * from apd where leibie='软件与程序设计/VB/'
CREATE PROCEDURE A
@table_name varchar(20),@strsql varchar(200)
AS
exec('select * from '+ @table_name + ' where leibie = '''+@strsql+'''')
GO
execute A @table_name='apd',@strsql='软件与程序设计/VB/'
=================================================================
//select * from apd where leibie like '%VB%'
CREATE PROCEDURE B
@table_name varchar(20),@strsql varchar(200)
AS
exec('select * from '+ @table_name + ' where leibie like ''%'+@strsql+'%''')
GO
execute B @table_name='apd',@strsql='VB'
===========================================================================Top
9 楼huntbookren()回复于 2006-05-02 10:36:10 得分 0
我现在主要是找不到什么原因,为什么慢,是sql 查询语句,还是repeater控件绑定慢?Top
10 楼ice_frank(回归......)回复于 2006-05-02 10:41:54 得分 0
repeater控件绑定应该不会慢的Top
11 楼huntbookren()回复于 2006-05-02 14:55:16 得分 0
那么大家有没有关于绑定效率的相关文章和注意事项啊??Top
12 楼gram901105723(刀剑无眼)回复于 2006-05-03 09:56:43 得分 0
还有一种可能是,
1。SQL慢,用查询分析器测一下。特别是该table中有计算字段,自增字段,肯定慢的要死,我遇到过
2。每个字段都要做强制类型转换的,(楼上的说法)Top
13 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-03 12:58:35 得分 0
objCommand.Fill(ds);
会将select语句的结果传到客户端,七千条记录还是通过网络从服务器传到你的客户机,分页只是在客户端做的而已
实际上
sda.Fill(ds , start , stop , "tblname")也是一样,你用"开始"-ms sql server-事件探查器
跟踪一下就知道了Top
14 楼JavaDianNet(如何做...如何做的更好...)回复于 2006-05-03 13:00:56 得分 0
解决方案:petshop里的simplerepeater都没有完全实现分页,也是客户端做了一下过滤而已.
顺便做做blog宣传,自己写一个repeater..可参照:
http://blog.csdn.net/JavaDianNet/Top
15 楼godspell(风似冷)回复于 2006-05-13 11:01:29 得分 0
string strCommand = "select * from " + strDatabase;
OleDbDataAdapter objCommand=new OleDbDataAdapter(strCommand,objConn);
DataSet ds=new DataSet();
objCommand.Fill(ds);
。。这里你一次性是把全部记录都加到ds里呀。虽然下面有分页,但只是一个页面效果了,在数据加载的时候还是把全部数据一起返回了呀。。
试考虑用下面的方法
objCommand.Fill(ds,PageSize*(CurrentPageIndex-1),PageSize,"table");
这样返回的记录集才是只有你的pagesize而不是所有的6千多数据,而且你的表的结构如何的很重的,对效率的影响很大的,如主键,索引那些。。。
Top
16 楼mendel(风逍遥)回复于 2006-05-19 17:52:46 得分 0
同意楼上的,是你的SQL语句有问题,你一次返回了所有的记录,肯定慢了
不信你试下Select Top 4 * From tabelnameTop
17 楼ztwz(-_-b(偶要像海绵一样的狂吸水水!))回复于 2006-05-19 17:55:02 得分 0
顶,学习!Top
18 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2006-05-19 18:34:42 得分 0
1、六千条不分页当然会慢了
2、要在后台把数据组合成html代码,都是字符串操作而且还是 六千条 ,呵呵,你想象速度把。这些数据还要从硬盘里读出来。
Top
19 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2006-05-19 18:35:06 得分 0
http://community.csdn.net/Expert/TopicView3.asp?id=4616896
另外可以看看,这个帖子。Top




