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

icbm 2005-04-07 10:45:30

做了一个考试系统,主要客观题,一次页面上显示一题,提交一题后,再显示下一题。

服务器是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人同时考试,并且速度不要太慢。

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

可开多贴放分。



...全文
873 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
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)。
HelloWorldwzy 2005-04-11
  • 打赏
  • 举报
回复
请用using()语句和连接池
参考petshop

楼主的水平要快点提高,好想是业余选手....汗下.
wssmax 2005-04-11
  • 打赏
  • 举报
回复
用完就要清空。
hongmingz 2005-04-11
  • 打赏
  • 举报
回复
要想利用链接缓冲,必须在ASP.NET页面中小心地处理两个部题.首先,在打开数据库链接时必须使用完全一样的链接字符串.只有用完全一样的链接字符串打开的那些链接才被放入相同的链接池.
注意:即使链接字符串中有非常微小的差异也会阴挠链接缓冲.
其次,必须注意要尽可能快地显式关闭你打开的连接.如果不使用Close()方法显式地关闭链接,连接就不会被放回链接缓冲池.
fanruinet 2005-04-11
  • 打赏
  • 举报
回复
>好象不是做连接的问题。
>因为我用INNER JOIN做连接,连接三张表。运行10000次,总费时在500-550毫秒。
>我不用连接三次查询,每次查询一张表,获得我要的数据。运行10000次,总费时在600-700秒之间。

>所以,我觉得不是表之间做连接的问题。

我搞不明白你怎么select比inner join耗时还长?你inner join难道就不select吗?都获取同样的数据怎么可能inner join耗时短呢?
你把你测试的语句贴出来看看
yipiaoqingshui 2005-04-11
  • 打赏
  • 举报
回复
多看看代码是否因为查询语句,和关闭链接这部分把..没用到的字段就不要SElect出来了
尽量不使用Select * from ~~~~这样!~很耗资源的!`
开了一个链接.记得一定要close
chengulv 2005-04-09
  • 打赏
  • 举报
回复
没时间看,先收下。
allserver 2005-04-09
  • 打赏
  • 举报
回复
调用存储过程会好些。
icbm 2005-04-09
  • 打赏
  • 举报
回复
>>U>>P>>

星期天晚上有130一起上线考试,下周二有200人同时进行考试。
fds2003 2005-04-08
  • 打赏
  • 举报
回复
up
i三千 2005-04-08
  • 打赏
  • 举报
回复
up
wyh2002 2005-04-08
  • 打赏
  • 举报
回复
数据库连接用完就立刻关闭,还有你的sql server的CPU占用率高90%,说明有数据太频繁操作,优化下你的数据库操作部分代码,特别是sql语句
icbm 2005-04-08
  • 打赏
  • 举报
回复
>>U>>P>>
tobaco 2005-04-08
  • 打赏
  • 举报
回复
有关“连接池”,你应该看看ado.net方面的资料,并不是你关闭一个连接后这个连接就真正关闭了,实际上它是被放回了连接池,这也是ado.net速度远快于ado的原因。连接池是默认启动的,默认的好像是10个连接。
tobaco 2005-04-08
  • 打赏
  • 举报
回复
还有这个“一次页面上显示一题,提交一题后,再显示下一题。”,可以考虑做成xml文件一次性下载下来,只向服务器提交结果,减少与服务器交互。
还有这个应该不是数据库连接的问题,我以前做的一台p4pc+512内存就能撑住100人。
tobaco 2005-04-08
  • 打赏
  • 举报
回复
我觉得这个肯定是代码的问题,你的系统设计恐怕也有问题。
肯定要在系统中缓冲要考试的题库,这样用户只有在保存结果时才会与数据库打交道。
赳赳老陈 2005-04-08
  • 打赏
  • 举报
回复
用DataSet缓存应该能充分利用内存
fanweiwei 2005-04-07
  • 打赏
  • 举报
回复
up
加载更多回复(45)

62,074

社区成员

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

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

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

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