关于数据库insert操作时的w3wp.exe的cpu占用率问题

blw 2010-11-11 04:18:33
一个在线测试软件,最大并发量的情况是可能会有千人左右同时交卷(即向数据库提交答案),想找个有效降低交卷时cpu占用率的法子,上一个贴子在这里
http://topic.csdn.net/u/20101108/15/15622e57-06e6-4843-b795-8b482932ed79.html?862987754


目前我作了个实验程序来模拟
---------------------

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)//循环50次,每次用一个独立的线程来模仿某一用户的操作
{
for (int i = 0; i < 50; i++)
{
Thread thInsert = new Thread(new ThreadStart(this.insert));
thInsert.Start();
thInsert.Join();
}
}
}

private void insert()
{
SqlConnection conn = GetSqlConnection();
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.Connection.Open();
SqlTransaction ts = comm.Connection.BeginTransaction();
comm.Transaction = ts;
comm.CommandText = "insert into Vote (B) values('" + a + "');"; //a是一个大概500长度的varchar

comm.ExecuteNonQuery();
ts.Commit();
comm.Connection.Close();
GC.Collect();
System.Threading.Thread.Sleep(5);
}
------------------------------------------
在最后加入System.Threading.Thread.Sleep(5);这句代码的情况下
我自己本机的cpu占用率从不加时的15%左右降到只有2%
本机环境:winxp cpu:e6320 ram:2g

现在奇怪的问题来了,一模一样的程序布署到双至强cpu的服务器上时,加不加sleep这句代码cpu占用率都差不多,基本都在15%左右,有时加的情况下占用率更高。我试过调整sleep的时间,但结果也基本一样
服务器环境:win2003 cpu:xeon e5410*2 ram:4g


上网查了不少资料,仍不得解,还请各位牛人给个意见
...全文
126 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongsun 2010-11-12
  • 打赏
  • 举报
回复
呵呵,这么跟你说吧,在处理高并发的时候,并不简单是程序上的架构了。

就好比csdn的论坛,每秒都会有几千个人提交数据。
blw 2010-11-12
  • 打赏
  • 举报
回复
ferry的方案,在我这个case下,效果并不明显,但还是多谢

我现在的方案是把GC.Collect()去掉,cpu占用明显好转
IHandler 2010-11-11
  • 打赏
  • 举报
回复
另外提几点建议:
1、去掉事务处理
2、使用存储过程
3、insert()方法代码加try{}catch{}
4、使用using(SqlConnection conn = GetSqlConnection()){}

62,074

社区成员

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

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

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

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