Asp.Net优化问题:CPU占用率100%,内存只用了30-40%。(二)

icbm 2005-04-07 10:46:19
做了一个考试系统,主要客观题,一次页面上显示一题,提交一题后,再显示下一题。

服务器是HP(Compaq) ML570,至强P3 700,双CPU,内存1G。

程序用的是Asp.Net(C#),数据库Sql Server 2000。

70人同时考试时,在任务管理器里观察,两个CPU占用率都达到了100%,但是1G的内存只用了300多M。

CPU主要被两个进程占用:Sql Server用了90%的时间,Asp.Net用了10%左右的时间。

这个应用是并发用户数比较多。用户不断查询,更新。我对sql server 2000数据库不是熟。听说可以用连接池提高效率。不用每个连接创建好了,用完后,就删除。而是循环使用。

我现在的做法是,在Page_Load中创建连接(SqlConnection),在Page_Unload中把连接(SqlConnection)删除。

目标期望是达到200人同时考试,并且速度不要太慢。

请各位同仁指点迷径。多谢!可以提供思路,或者提供参考资料。

可开多贴放分。



...全文
240 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
icbm 2005-04-24
  • 打赏
  • 举报
回复
谢谢大家的帮助。人多分少,还请大家见谅。
icbm 2005-04-24
  • 打赏
  • 举报
回复
我把连接池上限设为200,在任务管理器里看,内存也没用到一半(服务器有1G内存)。
icbm 2005-04-24
  • 打赏
  • 举报
回复
问题已经解决了。

是我做了一个“试题导航”,就是在屏幕下面显示一个题号索引,点相应的题号就可以跳转到那一题。
建立“试题导航”是一个很费时的过程,所以我在进入考试界面的第一次,建立“试题导航”,然后把“试题导航”的内容放在Session里。
以后就检查这个存放“试题导航”信息的Session是否为空(Session数据有时会因超时等原因自动清空),如果不为空,就重新读取数据库重建“试题导航”。

结果检测Session是否为空的语句有误,导致每次Page_Load的时候,都会重建“试题导航”,导致数据库占用量CPU时间很多。


我把数据库连接池的大小上限设为200。

4月12日,250人一起考试,速度也非常快,感觉不到明显的延迟。


总结一下:

一、数据库相关字段做索引。
二、如果内存较大,可以把数据库的连接池设大一些。
三、在Page_Load里(或者第一次使用时)创建一个Connection,但不要打开(Open)。要用的时候把Connection打开(Open),用完就关掉(Close)。
  • 打赏
  • 举报
回复
sqlconnection.close
icbm 2005-04-07
  • 打赏
  • 举报
回复
该建的索引都建了。估数据量有几万条吧。
evaELLIS 2005-04-07
  • 打赏
  • 举报
回复
用完SqlConnection就要马上close()
LoveCherry 2005-04-07
  • 打赏
  • 举报
回复
表中多少记录?是否有搜索操作?如果在50W的记录以上进行搜索务必建立索引。
simon8181 2005-04-07
  • 打赏
  • 举报
回复
多线程
yezie 2005-04-07
  • 打赏
  • 举报
回复
SqlConnection用完就关闭,不要等到Page_Unload
tuoshi 2005-04-07
  • 打赏
  • 举报
回复
几万条记录,几百人同时使用应该不会耗这么多资源的。
alwaysinsist 2005-04-07
  • 打赏
  • 举报
回复
可以考虑使用页面缓存。
alwaysinsist 2005-04-07
  • 打赏
  • 举报
回复
con.Close();
rainlake 2005-04-07
  • 打赏
  • 举报
回复
fancy。256是并发数。
tuoshi 2005-04-07
  • 打赏
  • 举报
回复
数据库操作完立即关闭连接

优化表结构及SQL语句

对读取比较多的数据建立缓存
fanruinet 2005-04-07
  • 打赏
  • 举报
回复
楼上分析有理
优化的重点在数据库这边

不过,ACCESS真能支持千人在线吗?ACCESS的连接限制是256呀
hchxxzx 2005-04-07
  • 打赏
  • 举报
回复
我看不是这个问题.如果SQLSERVER的效率如此之低的话,那么你看看象动网ACCESS版本,它同时可以支持上千人在线一点问题都没有.你才区区几十个人就累成这样?没有道理.
而且说数据库打开没有及时关闭,这也没有道理.SQLSERVER的并发数也不少,而且才70人在线,每秒钟的操作不至于超过它的并发数,况且一个页面才显示一个题目,页面之间停留时间非常之短,不至于因为没有及时关闭引起此问题.
依我看,主要有两个问题.
1.数据库问题:恐怕是数据库出现了某些故障.
2.程序有问题:我曾经见过一个SQLSERVER搞的话费查询软件,里面的记录不足百万条,查询的时候慢得要死(要1分钟以上).后来我做了一个ACCESS版本,同样的记录,查询速度飞快,1-3秒钟之内就可以出来.

所以,我建议你:
1.有条件先查我说的第2个问题(假如有人对此系统很熟的话)
2.无条件则把数据库搬到另一台机器去(重新安装一个数据库)运行看看.

62,074

社区成员

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

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

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

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