gpt4 book ai didi

asp.net-mvc - IsReusable属性中的上下文切换

转载 作者:行者123 更新时间:2023-12-04 04:35:18 29 4
gpt4 key购买 nike

IsReusable属性

以下是我对IsReusable属性的理解

如果处理程序返回静态内容。将该值设置为true是安全的。但是,如果线程返回动态内容,则为了使其线程安全,应将IsReusable设置为false。

在这种情况下,可能会发生上下文切换,这可能导致处理程序提供错误的输出。

困惑

上下文切换说-将一个线程切换到另一个线程称为切换。正确的?

第2段说,可能会发生上下文切换-我认为,当您发送请求时。那时只有一个上下文创建,结果为Response。正确的?因此,如何进行上下文切换是可能的。你能给个例子吗?

最佳答案

处理程序“返回”什么的问题(更好的表述:处理程序写的内容)与IsReusable属性无关。此属性用于声明代码的线程安全性,而不是内容是否可以更改。例如,编写DateTime.Now的处理程序将是可重用的。具有SqlConnection字段并读取不变数据的处理程序将无法重用,因为即使读取的数据始终相同,连接也不是线程安全的。

上下文切换也与此无关,因为在多核设备上,不需要上下文切换即可引起并发。对于在ProcessRequest派生类的同一实例上并发调用IHttpHandler而言,您的意思是“线程安全”。

现在提供一些实用建议:始终使IsReusable返回false并确保您的处理程序类分配便宜,并且不会带来大量的垃圾。 GC'ing单个对象是什么!我的猜测是创建IsReusable属性是为了使ASP.NET在玩具基准测试中具有人为的优势,或者支持架构复杂的处理程序,这些处理程序创建起来很昂贵。

如果您有昂贵的资源(例如缓存),请将其存储在其他位置(也许在静态字段中)。

获得线程安全性的一种简单方法是不共享任何内容。从这个意义上讲,不要共享处理程序。

TL; DR:IsReusable设置为false并继续。这没东西看。这只是ASP.NET中一个令人困惑的设计缺陷。

关于asp.net-mvc - IsReusable属性中的上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17406582/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com