可能的重复:
ASP .NET 单例 https://stackoverflow.com/questions/2134511/asp-net-singleton
我知道单例类和具有静态属性/方法的类之间的一般差异,但我想知道它如何影响 ASP.NET MVC Web 应用程序中的并发性(许多用户登录应用程序)?例如,我们将设置存储在单例(或静态属性)类中。两个用户是否有可能突然开始看到/共享相同的设置?我的意思是,如果一个用户更改他的设置(因为它们存储在应用程序运行时的内存中),它会影响其他用户吗?据我所知,IIS 为应用程序创建一个 w3wp.exe 进程,因此所有用户/访问者都将位于同一进程中,那么这会对任何事情产生影响吗?
简短的回答是,是的,用户将看到任何静态属性的相同值。它将在会议之间共享。
长答案:是的,此外,如果每个会话都尝试同时更新共享属性,则可能会导致不良行为,特别是如果共享(静态)属性是动态增长的类型(任何集合类型)。访问或修改共享属性的值时,您需要处理并发性。
拥有单例或静态类的唯一原因是专门与所有连接共享一组值/设置/配置数据。如果所有用户都需要相同的信息,它会保持较低的内存利用率。在这种情况下,您需要注意仅初始化这些值一次,或者使用锁以原子方式更新它,以确保一次只有一个线程更改信息。任意数量的线程都可以读取数据而不会互相干扰。
如果您需要为不同的用户使用不同的值,最好使用实例属性,因为您无需担心并发以及与锁定相关的性能影响。
静态方法很好。实例方法和静态方法之间唯一真正的区别是调用它们的方式。即使实例方法也仅保存在内存中的一个位置。只有实例属性才会被赋予自己的内存空间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)