webservice性能的问题

nicochang 2005-10-14 11:33:34
我写了一个webservice,里面什么操作也没有,架设在ii6上
[WebMethod]
public void Insert(string name)
{
// BusinessLogic.Test.Test t = new BusinessLogic.Test.Test();
// t.InsertSQL(name);
}
有一个客户端,用多线程模拟并发访问webservice,每个线程访问50次webservice,每次访问睡眠120毫秒,下面是每个线程操作的代码
public void InsertSqlServerWithWebService()
{
DateTime time1 = DateTime.Now;
try
{
zhuoxin.SQLSERVERService service = ServiceManager.Service;
for(int i = 0 ; i < nLoopCount ; i++)
{
//IAsyncResult res= service.BeginInsert(Thread.CurrentThread.Name +"-"+ i.ToString() , null , null);
//service.EndInsert(res);
service.Insert(Thread.CurrentThread.Name +"-"+ i.ToString());
//ServiceManager.Service.Insert(Thread.CurrentThread.Name +"-"+ i.ToString());
Thread.Sleep(Form1.TIME_OUT);
}
TimeSpan span = DateTime.Now - time1;
Log(Thread.CurrentThread.Name + ":" + span.TotalSeconds.ToString());
}
catch(Exception e)
{
Log(e.Message);
}

}
下面是启动线程的代码
private void button8_Click(object sender, System.EventArgs e)
{
ServiceManager.nPoolBottom = 0;
nLoopCount = int.Parse(txtLoopCount.Text);
// InsertSqlServerWithWebService();
TIME_OUT = int.Parse(textBox2.Text);
int nThreadCount = int.Parse(textBox1.Text);
Thread[] threads = new Thread[nThreadCount];
for(int i = 0 ; i < nThreadCount ; i++)
{
Thread t = new Thread(new ThreadStart(InsertSqlServerWithWebService));
t.Name = i.ToString();
threads[i] = t;
}
foreach(Thread t in threads)
{
t.Start();
}
}
现在的问题是,如果我用一个线程跑时间大概是7秒左右,其中包括一个6秒的睡眠时间
我把这个线程数增加到10个,基本保持不变,这样一直增加到17个基本都没有问题
但是再向上增加,时间就开始呈线性增长了
30个时要14秒,40个要23秒左右,50个要30秒左右(以上时间,都是每个线程执行50次webservice调用,每次调用后睡眠120毫秒)
为什么这么几个并发就把性能降下来了,有没有办法解决




...全文
457 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicochang 2005-10-17
  • 打赏
  • 举报
回复
解决了,是客户端这边,睡眠时间太短造成的,应该给iis那边留出一段时间
happyamei 2005-10-17
  • 打赏
  • 举报
回复
学习中。。。。。
qqqdong 2005-10-16
  • 打赏
  • 举报
回复
设置webservice pooling
timiil 2005-10-15
  • 打赏
  • 举报
回复
我觉得这样测试不太准确,最好把你的数据库服务部署到别的机器上,只测试WS的压力。实际上严肃的应用也是这样部署的吧?
nicochang 2005-10-14
  • 打赏
  • 举报
回复
我在两台机器上试过,不起作用,和一个机器上时间差不多
在性能里应该观察哪个计数器呢,我把asp.net的计数器都加上了,但是好像没有什么反应
processor time有反映
systemspy 2005-10-14
  • 打赏
  • 举报
回复
你是想看有多个客户端调用WebService时WebService的性能吧

你可以找开“管理工具”中的“性能”工具看看WebService的性能

你在一台机子上使用了那么多线程,不是WebServic慢,是你客户端慢罗
nicochang 2005-10-14
  • 打赏
  • 举报
回复
服务器一点压力也没有
cpu,网络都没有什么压力
是1500次,但是,是分30个线程完成的,难道iis是单线程的软件啊,同时只能处理一个请求吗
1次插入50条的时间,和10个线程,每个线程插入50个的时间是一样的,说明iis还是有多线程的,但是不会就那么少吧
tiaoci 2005-10-14
  • 打赏
  • 举报
回复
每个调用插入50条记录,你服务器饱和了么,

当然时间线形增加了,30个线程大约要插入 30 * 50 条记录吧

要调用近 1500次的WS呢,14S算好了,平均下来的反应时间是10ms呢

10ms/p 已经很好了,你以为是进程内调用啊

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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