2

我正在使用 Visual Studio 2010 测试 ASP .NET Web 服务。我希望能够为请求/秒设置一个相当低的目标(比如 20)并以良好的精度实现它(比如 +/- 2%)。我正在使用 ASP.NET Apps v4.0.30319 类别中的性能计数器“请求/秒”。

我的 WebTest 持续时间变化很大,负载测试保持不同数量的用户。当我查看结果图时,RPS 介于 0 和 60 之间,并且不断上升和下降。

是否有某种方法可以设置 VS 从控制器的角度发射恒定的 rps。甚至是固定测试/秒。

也许一个计数器可以让我测量每秒发起的请求而不是请求/秒,因此时间的变化不会产生影响。

4

1 回答 1

1

做到这一点的唯一方法是使用多个线程 -RPS * ConnectionTimeout如果所有请求都必须等待并且您没有使用异步 IO,则可能最多使用多个线程。

您可以作弊并使用ThreadPool(但请注意,它不保证 re: scheduling)。如果您使用的是 .Net 4,还有任务并行库。

对于 ~20 RPS,我怀疑缺乏 ThreadPool 精度将是一个问题。当您获得更高的 RPS 时,情况将会改变。

如果你想自己动手做,请注意很难做好。一个简单的实现是让一个主工作线程为每个连接启动新线程......

Private ShutdownRequested As Boolean = False
Public Sub StartLoad(RPS As Integer)
    ShutdownRequested = False
    Dim MainThread As New Threading.Thread(Sub() Worker(RPS))
    MainThread.Start()
End Sub

Public Sub StopLoad()
    ShutdownRequested = True
End Sub


Private Sub Worker(RPS As Integer)
    While Not ShutdownRequested
        Threading.Thread.Sleep(CInt(1 / RPS * 1000))
        Dim Worker As New Threading.Thread(Sub() OpenAConntection())
    End While
End Sub

更好的方法是使用此处描述的异步 IO 机制,因为它允许使用有限数量的线程进行许多连接。

这篇文章也可能对 re:threading 感兴趣

于 2012-07-17T22:07:01.013 回答