现场告急,100求救! WEB系统没有反映!!!

seinu 2009-01-06 09:05:48
WEB服务器是WINDOWS2003 server,数据库服务器在另一台计算机上,数据库是Oracle10g,我在一个页面中把表T_FAULT(有100列)的所有数据都查询出来,大概有16000行;
我在某个页面中用如下的语法绑定GridView,此GridView每页显示30行,显示页面非常慢,IE中的进度条一点一点的往前走,从而导致其它客户操作其它内容也非常慢,跟系统没有反映差不多,非常影响用户的正常工作,用户抱怨连天,只能在WEB服务器上把"ASP.NET 状态服务"和"World Wide Web Publishing Service"重新启动才能操作其它内容,如果再进入此功能,故障重现,
目前我只能告诉用户目前不要使用此功能,正在寻找解决方法.

OracleConnection mainConn = new OracleConnection()
mainConn.ConnectionString="Data Source=source1;Integrated Security=false;Password=sa;User ID=sdk5;Max Pool Size=100;Min Pool Size=5;Pooling=True;"
mainConn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = mainConn;
cmd.Parameters.Clear();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from T_FAULT order by SDATE";
OracleDataAdapter da = new OracleDataAdapter()
da.SelectCommand = cmd;
DataTable dt;
da.Fill(datatable);
if(dt!=null)
{
GridView1.DataSource = dt;
GridView1.DataBind();
GridView1.SelectedIndex = -1;
}
mainConn.Close();
...全文
127 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
seinu 2009-01-08
  • 打赏
  • 举报
回复
谢谢大家,最后还是采用存储过程分页的方式,问题得到解决.
niitnanfeng 2009-01-06
  • 打赏
  • 举报
回复
mark
zhouxing_24 2009-01-06
  • 打赏
  • 举报
回复
你用什么东西实现分页功能都无所谓。
主要是你不能一次把所有的数据都读取出来,这样会速度很慢。
建议你写一个存储过程,例如:初始化的时候用户只能看见前30条,那么你就从数据库里读取出30条,等用户点击下一页,那么你就再读出新的30条。以此类推!
这样你的问题就解决了!
seinu 2009-01-06
  • 打赏
  • 举报
回复
通过Gridview控件带的分页不行吗?
lange_love 2009-01-06
  • 打赏
  • 举报
回复
晕,数据量也不少了,写个存储过程把。别什么都SELECT *
hotit 2009-01-06
  • 打赏
  • 举报
回复

利用存储过程分页

可以缓解
conan19771130 2009-01-06
  • 打赏
  • 举报
回复
还是分页吧
zjybushiren88888 2009-01-06
  • 打赏
  • 举报
回复
性能很差, 建议使用存储过程 分页 缓存
homesos 2009-01-06
  • 打赏
  • 举报
回复
在数据库中用存储过程进行分页,显示多少获取多少,这样占用的带宽小,显示速度快,如果再采用AJAX,用户体验应该会更好。
空心兜兜 2009-01-06
  • 打赏
  • 举报
回复
学习下
designonline 2009-01-06
  • 打赏
  • 举报
回复
同意1楼做法
luyanvv 2009-01-06
  • 打赏
  • 举报
回复
分页会比较好,很多数据查询出来就会输出HTML代码,

越多数据输出越多代码,肯定慢。

我前几天也碰到过这样的问题。

我是用AspNetPager控件给它分页,速度果然快很多,

再看一下代码,没有之前全部查询出来那么多HTML代码了

zpcoder 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 net_lover 的回复:]
你应当对代码进行优化,采取存储过程分页,增加缓存,一次显示很多数据进行绑定,性能很差
[/Quote]

我自己也是这个建议
caicai_45 2009-01-06
  • 打赏
  • 举报
回复
select * from T_FAULT order by SDATE

1 是否需要显示所有的数据,如果有写特别大的字段,不需要显示,那么就不要图方便,写成 select * ,写成select 字段1 , 字段2 这样的方式去做。

2 如果是1600条数据,那么不算特别多,估计时间是花费在了取数据上面,建议在 SDATE 这个字段上增加索引。

anheizhizi 2009-01-06
  • 打赏
  • 举报
回复
T_FAULT 表里有多少数据啊?
hongqi162 2009-01-06
  • 打赏
  • 举报
回复
发一个oracle存储过成实现分页

procedure sp_Page(p_PageSize int, --每页记录数
p_PageNo int, --当前页码,从 1 开始
p_SqlSelect varchar2, --查询语句,含排序部分
p_SqlCount varchar2, --获取记录总数的查询语句
p_OutRecordCount out int,--返回总记录数
p_OutCursor out ResultData)
as
v_sql varchar2(3000);
v_count int;
v_heiRownum int;
v_lowRownum int;
begin
----取记录总数
execute immediate p_SqlCount into v_count;
p_OutRecordCount := v_count;
----执行分页查询
v_heiRownum := p_PageNo * p_PageSize;
v_lowRownum := v_heiRownum - p_PageSize +1;

v_sql := 'SELECT *
FROM (
SELECT A.*, rownum rn
FROM ('|| p_SqlSelect ||') A
WHERE rownum <= '|| to_char(v_heiRownum) || '
) B
WHERE rn >= ' || to_char(v_lowRownum) ;
--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn

OPEN p_OutCursor FOR v_sql;

end sp_Page;
glt3260053 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 seinu 的帖子:]
WEB服务器是WINDOWS2003 server,数据库服务器在另一台计算机上,数据库是Oracle10g,我在一个页面中把表T_FAULT(有100列)的所有数据都查询出来,大概有16000行;
[/Quote]
每次都查询太多的数据,牺牲很大啊!
可以分页查询,查询前多少条绑定页面,点击下一页再次查询!
每次都取小量数据
孟子E章 2009-01-06
  • 打赏
  • 举报
回复
可以使用rownum()的扩展函数加表变量的方法也可以,
孟子E章 2009-01-06
  • 打赏
  • 举报
回复
你应当对代码进行优化,采取存储过程分页,增加缓存,一次显示很多数据进行绑定,性能很差

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧