访问WebAPI中的HttpRequestMessage属性集合时的性能问题

时间:2012-09-28 20:17:45

标签: c# .net performance caching asp.net-web-api

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

示例:

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

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

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

还有其他人经历过这个吗?是否有一种不同的方法可以用来缓存整个Http管道中可用的单个请求长度的数据?

1 个答案:

答案 0 :(得分:0)

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

HttpContext.Current.Items.Add(REQUEST_ID_KEY, request.GetCorrelationId().ToString());