模拟尽可能多的并发来测试webservice性能,我采用了多线程的方式来进行模拟,首先介绍一下思路:需要模拟每秒1000个并发数据,那么大略的计算方法:设置能够处理的最大线程数1000,超过1000的时候让它挂起1ms,资料有个粗略的计算(处理过程时间忽略不计,理想状态)
1
public class ThreadTest
2
{
3
private int poolFlag = 0;//标记
4
private const int amountThread = 2000;//线程总量
5
private int maxThread = 1000;//可执行线程最大数量
6
private Mutex muxConsole = new Mutex();
7
8
public void TestStart(int iThread)
9
{
10
if (iThread > 0)
11
{
12
maxThread = iThread;
13
}
14
for (int i = 0; i < amountThread; i++)
15
{
16
// 创建指定数量的线程
17
// 是线程调用Run方法
18
// 启动线程
19
Thread trd = new Thread(new ThreadStart(Run));
20
21
trd.Start();
22
}
23
}
24
25
public void Run()
26
{
27
muxConsole.WaitOne(); //阻塞队列
28
Interlocked.Increment(ref poolFlag); //标记+1
29
if (poolFlag != maxThread) //判断是否等于上限
30
{
31
GetService(); //处理方法,请求webservice
32
33
muxConsole.ReleaseMutex(); //如果此线程达不到可执行线程上限,则继续开通,让后面的线程进来
34
}
35
else
36
{
37
Thread.Sleep(1000/maxThread); //模拟执行,Sleep的时间,理想状态计算可控制每秒模拟的请求数
38
}
39
40
//标记-1
41
Interlocked.Decrement(ref poolFlag);
42
} }

2



3

4

5

6

7

8

9



10

11



12

13

14

15



16

17

18

19

20

21

22

23

24

25

26



27

28

29

30



31

32

33

34

35

36



37

38

39

40

41

42

以下引用别人的经验之谈:

































本人总结:
GetService()方法中是通过new 来请求web服务的,这样的话只能实现并发"请求"多次web服务,而不能模拟出并发多次"连接"并"请求"的功能.
找到关于创建HTTP连接的方式:




还未测试结果,明天再试吧,哈哈