我有一个IHttpHandler,我相信它可以从重用中受益,因为它的设置成本很高,并且是线程安全的。但是将为每个请求创建一个新的处理程序。我的处理程序没有被重用。
以下是我的简单测试案例,没有昂贵的设置。这个简单的例子说明了我的问题:
public class MyRequestHandler : IHttpHandler
{
int nRequestsProcessed = 0;
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
nRequestsProcessed += 1;
Debug.WriteLine("Requests processed by this handler: " + nRequestsProcessed);
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}
}
Requests processed by this handler: 1
Requests processed by this handler: 1
Requests processed by this handler: 1
Requests processed by this handler: 1... at least 100 times. I never see > 1.
我是否误解了IsReusable的工作原理?还有其他可以阻止重复使用的东西吗?如果有任何区别,将从Silverlight应用程序中调用我的处理程序。
最佳答案
IsReusable不是保证。
只需重构您的处理程序,然后将所有交叉请求状态放入另一个类即可。无论如何,以最佳实践的方式在Web应用程序中清楚地区分交叉请求状态,因为它很危险。
关于c# - IHttpHandler IsReusable,但是没有被重新使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12239711/