我有一个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应用程序调用的,那么会有什么不同吗?
MyRequestHandler
的运行方式的。例如,它是在你的web.config中进行配置的,还是你在Global.asax
中编写了注册代码? - Jacob