1

使用 ASP.NET MVC4,我在 WebAPI 项目中创建了一个 DelegatingHandler。我使用 Handler 将一些数据插入到 HttpRequestMessage 属性集合中,以便 Http 管道的后面部分(例如其他处理程序、控制器)可以访问该数据。

例子:

var httpRequest = (HttpRequestMessageProperty) request.Properties["httpRequest"];
httpRequest.Headers["MY_DATA"] = "some data";

我想测试这对 WebAPI 请求处理的吞吐量的影响,所以我创建了一个控制台应用程序,它在 Action 委托中实例化一个 HttpClient,发送一个请求,并在发送下一个请求之前等待响应。我使用此处描述的性能测量策略计算此操作委托在 5 秒窗口内成功执行的次数:http: //www.codeproject.com/Articles/61964/Performance-Tests-Precise-Run-Time-Measurements-无线

我观察到的是,在执行从 Properties 集合中检索 httpRequest 的单行时,性能上有很大的损失。如果没有这行代码,我会在 5 秒内看到 >700 次完成。当我添加该行时,它会在 5 秒内降至 <20 次。

有没有其他人经历过这个?我应该使用不同的方法来缓存整个 Http 管道中可用的单个请求长度的数据吗?

4

1 回答 1

0

将项目添加到 Current HttpContext Items 集合似乎有效,并且对我正在测量的性能没有明显影响。

HttpContext.Current.Items.Add(REQUEST_ID_KEY, request.GetCorrelationId().ToString());
于 2012-10-01T15:11:14.000 回答