查询出来的结果集,为一个ArrayList,对象数量上万,保存在viewstate做自定义分页。导致页面速度较慢。可能方法拙劣,但不才,想不到更有效率的解决方法。请问大家有什么好的建议呢?先谢了。
解决方案 »
- 匹配关键字
- 我配置文件时,如下的公钥从哪里取得来的?PublicKeyToken=b03f5f7f11d50a3a
- XML文件显示的问题
- IIS,ASP.NET问题 (高分)
- 未将对像引用到实例,急,在线等,帮帮忙!
- 日期格式转换
- 大家觉得哪个.net论坛程序最好..
- 沈阳有哪些公司招聘.NET程序员??
- 为什么刷新网页不好用,非要关掉IE浏览器,在重新打开
- 超级难题: 哪位大哥研究过图片上写文字, 并可以精确的控制文字的大小? 谢谢!!!
- Gridview下有列為checkbox,對選中的checkbox操作(刪除、修改、)及新增Gridview數據(C#)
- 如何进行组件式开发啊?比如做好一个功能或者模块后怎么让以后开发的软件直接使用
我要做的是将数据库中某表的所有数据轮询并对每条记录都生成一个返回值,并保存在上述的结果集ArrayList当中,并根据计算出来的返回值排序。因此,必须将所有数据取出,一万条应该是不能避免的。
楼上所说的,存储过程分页的例子,我用过,包括webdiyer的aspnetpager。但存储过程分页是将数据库中的某段数据取出并计算显示,而我要做的是将全部的数据计算并显示排序,分页。因此,该方法也有待继续探讨。2 我读了读MSDN上的“状态管理建议”这篇文章,根据我的需求,可能只有采用数据库支持才能维护站点的状态,但目前还不能修改数据库,其他几种方法又对大对象操作效率不高,希望做过类似的朋友可以提点建议。
ps:谢谢楼上。
如果非要把数据全取出来,可以考虑cache,session也行。页面不可能同时显示1W条以上,把要显示的从cache里取。
cache有考虑过,但客户端支持是个问题。而且,涉及到磁盘文件读写的话,会比在内存中直接操作效率更高么?
分页读取,不能将结果集整体排序。比如第一页中,第1条到第5条得出的数据为0.9,0.6,0.6,0.5,0.2;第二页中数据为0.95,0.8,0.6,0.2,0.1,0.03。但我要0.95这条数据显示在第一页,即0.95,0.9,0.8,0.6,0.6,0.6。
------------------
分页读取也可以排序读取的.
象这样的存储过程有很多,.
听说MS SQL 05 可以指定回返行数, 不需要存储过程那么麻烦了.http://www.code-studio.net/CSView.aspx?aid=244
SQL Server 2000通用分页查询存储过程(可指定返回字段,查询条件)
------------------
分页读取也可以排序读取的.----------------
请说仔细一点可以吗?谢谢
----------------
看9楼的回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetRecordByPage]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[GetRecordByPage]
GOCREATE PROCEDURE GetRecordByPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 主键字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '', -- 查询条件 (注意: 不要加 where)
@IsReCount bit = 0, -- 返回记录总数, 非 0 值则返回
@FieldList varchar(200) -- 返回的字段
ASdeclare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(100) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @PageIndex = 0
begin
set @PageIndex = 1
end
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
endif @strWhere != ''---条件不为空
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
else---条件为空
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder set @strTmp =''
if @strWhere != ''
set @strTmp = ' where ' + @strWhereif @PageIndex = 1
begin
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @FieldList + ' from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
endif @IsReCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+ @strTmpexec (@strSQL)
GO
26行的
-------------
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
------------这里排序字段是可排序的字段类型,但我的排序依据字段是一个image类型(不能order by )。是通过计算所有数据的图像二进制长度排序结果集。
需求是让通过提取image的特征并计算。