IHttpHandler.IsReusable有什么用途?

我正在写一个IHttpHandler ,我需要实现一个IsReusable属性。 当我看到MSDN文档时,它说:

获取一个值,指示是否有其他请求可以使用IHttpHandler实例。

这不是很有帮助。 在哪些情况下,我应该使用可重用的处理程序,在哪些情况下不应该重用?

后续问题:

  1. 什么是重用?
  2. Reusable = true时,我可以维护状态(即类variables)吗?

该属性指示是否可以使用相同的IHttpHandler实例处理多个请求。 默认情况下,在请求pipe道的末尾,放置在HttpApplication的handlerRecycleList中的所有http处理程序都被设置为null。 如果一个处理程序是可重用的,它将不会被设置为null,并且该实例将在下一个请求中被重用。

主要收获是性能,因为垃圾收集的对象将会减less。
可重用的处理程序最重要的一点是它必须是线程安全的。 这不是微不足道的,需要一些努力。

如果您仅使用托pipe资源,我个人build议您保留默认行为(不可重复使用),因为垃圾收集器应该轻松处理它们。 与引入难以find线程错误的风险相比,来自可重用的处理程序的性能增益通常可以忽略不计。

如果决定重用处理程序,则应避免在类variables中维护状态,因为如果同时访问处理程序实例,则多个请求将写入/读取值。

显然,这将处理程序保存在内存中,并能够处理多个请求。 设置为false时,必须为每个传入请求创build一个新的处理程序实例。

下面是一个问题,说明如果使用不当,会发生什么情况:

使用HttpHandlerstream数据库图像

每次请求进入时,回收处理程序比新处理程序更便宜,服务器将减less内存,从而简化GC必须执行的工作。 如果处理程序处于处理新请求不会有问题的状态(即,处理程序实例中的任何状态已被重置) ,则应该有资格作为可重用的。

编辑

我不确定我的答案是否正确定义了重用。 它实际上允许同时重用,所以最好避免或者以线程安全的方式谨慎pipe理状态。