private void Band_DataReader() { IList<Province> province = new List<Province>(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = ""; conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = "select * FROM province"; cmd.CommandType = CommandType.Text; cmd.Connection = conn; SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (dr.Read()) { Province p = new Province(dr[1].ToString(), dr[2].ToString()); province.Add(p); } dr.Close(); conn.Close(); GridView1.DataSource = province; GridView1.DataBind(); }用sqldatareader吧,因为它只是读取不需要缓存所有比较快捷,实用于大数据量读取的操作
或者优化SQL语句 给数据库字段添加索引?
如果还慢 你可以优化下你的代码
还慢就看你的SQL语句能不能优化
还慢你就自杀把!!!
将分页后的数据源返回给gridview就行了啊前台弄个分页控件,来构造URL传递给DAL到存储过程
1, 建立要检索字段的索引,优化SQL,使用临时表等
2,页面缓存
<%@ OutputCache Duration="40" VaryByParam="*" %>
或者其它缓存等
3, 分页查询。
4,禁用ViewState
5,业务逻辑调整,非要使用有效参数方可查询。
1,建立检索字段的索引,优化sql
2,使用缓存 页面缓存
<%@ OutputCache Duration="40" VaryByParam="*" %>
其它缓存等
3,禁用viewstate
4,分页查询 5, 调整业务逻辑,非要输入有效参数方可查询
可以采用分页,只返回一页数据如果执行时间并不太长,禁用gridview的viewstate
否则数据经过base64加密后存于客户端并在数据交互中传输,极大影响效率分页的话你还需要自己处理下页码的显示
首先很重要地,假设你在页面上放一个Button进行回发测试,这个按钮根本不影响页面其它任何控件,因此这个按钮被随时按下而回发时,你应该测试出页面上任何控件、任何状态都没有混乱或者甚至丢失,同时当然也不应该去读取数据库进行查询。如果有任何一种bug,你就应该重现考虑自己到底是否学会了asp.net编程,要从头学习asp.net。完成了这个基本的测试,才能考虑一些常见的优化做法。比如说重复的访问,不论是同一用户还是不同用户的访问,很多都应该是访问页面缓存(仅仅拿出asp.net缓存的html直接输出),而不是重新创建Page对象。然后,有很多查询结果其实是应该从数据缓存中直接拿出结果的,比如说查询“2010年度十大杰出青年的详细资料”,这个查询结果就可以直接从数据缓存中取出,而不是每一次都去从“各年度十大杰出青年列表,所有青年的详细资料”两个表中去计算结果。然后当然是修改你的页面逻辑,那些不需要seo的html内容,可以使用ajax异步加载,而不是第一次生成html时去计算。最后就是对于html上的图片、其它文件等等(尽管这些也可能异步加载),尽可能放到html的最后用javascript加载,而不是在主要的table或者div内部解析和加载。
找个分页存储过程,每次只返回一页数据再绑定
二、选择存储过程分页,返回当前页数据
三、ajax查询
四、不选择控件,选择用表单呈现数据。
{
IList<Province> province = new List<Province>(); SqlConnection conn = new SqlConnection();
conn.ConnectionString = "";
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * FROM province";
cmd.CommandType = CommandType.Text;
cmd.Connection = conn; SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (dr.Read())
{
Province p = new Province(dr[1].ToString(), dr[2].ToString());
province.Add(p);
}
dr.Close();
conn.Close(); GridView1.DataSource = province;
GridView1.DataBind();
}用sqldatareader吧,因为它只是读取不需要缓存所有比较快捷,实用于大数据量读取的操作