当前位置:  开发笔记 > 后端 > 正文

bool IsReusable在http处理程序接口中的意义

如何解决《boolIsReusable在http处理程序接口中的意义》经验,为你挑选了2个好方法。

在编写http处理程序/模块时,有一个实现的接口成员叫做bool IsReusable.

这个成员有什么意义?如果我将其设置为false(或true),这对于其他Web应用程序意味着什么?



1> AnthonyWJone..:

处理程序的正常入口点是ProcessRequest方法.但是,您可能在类构造函数中有代码,这些代码将一些构建成本昂贵的实例值放在一起.

如果指定Reusable为true,则应用程序可以缓存实例并通过一次又一次地调用其ProcessRequest方法在另一个请求中重用它,而无需每次都重新构建它.

应用程序将实例化处理当前负载所需的许多处理程序.

缺点是如果所需的实例数大于当前存在的实例数,则会导致使用更多内存.相反,它们也可以减少表观内存使用,因为它们的实例值将在GC周期中存活,并且不需要经常重新分配.

另一个需要注意的是,您需要确保在ProcessRequest执行结束时,对象状态与您希望另一个请求重用该对象一样.


您将对象重用视为通过指定IsReusable = True实现的关键优化.设置IsReusable = False会导致服务器无法实例化处理程序的多个实例.IE - 它是否消除了并发请求?

2> LukeH..:

继AnthonyWJones的回答之后,如果你的HTTP处理程序返回true,IsReusable那么你应该确保它是完全线程安全的.

文档中没有任何内容表明可重用的处理程序不能同时重用,尽管当前的Microsoft实现似乎只是连续重用它们.但是,至少在理论上,单个处理程序实例可以由多个请求同时重用,因此您不应该依赖可能被其他并发线程修改的任何数据.


关于要求线程安全的`IsReusable`的声明似乎与AnthonyWJones的回应相矛盾.据我所知,它的第三段(应用程序将实例化多个......),一个可重用的处理程序实例不会同时重用,而只能在完成当前处理之后.如果这是真的,那么就没有必要是线程安全的.
上下文切换是指CPU停止对一个线程的处理并开始对另一个线程进行处理.IE将CPU的上下文从一个线程切换到另一个线程.这在PC中不断发生,它给了我们多核计算机之前的多任务处理幻觉.
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有