我知道实例变量不是线程安全的,因为它们存储在堆上。我正在重构 ASP.NET 单线程应用程序中的代码,并且尝试更多地使用实例变量。
我的问题是:开发人员是否因为可能的多线程问题而避免使用实例变量?(即使应用程序现在不是多线程的,将来也可能是)。我记得读到应该使用实例变量来改进设计,使用组合和聚合而不是关联(与局部变量一样)。
是否有任何标准可以帮助开发人员决定何时使用实例变量以及何时使用局部变量。我已经用谷歌搜索了这个并且我查看了 MSDN,但我没有设法找到我的具体问题的答案。
我知道实例变量不是线程安全的,因为它们存储在堆上。我正在重构 ASP.NET 单线程应用程序中的代码,并且尝试更多地使用实例变量。
我的问题是:开发人员是否因为可能的多线程问题而避免使用实例变量?(即使应用程序现在不是多线程的,将来也可能是)。我记得读到应该使用实例变量来改进设计,使用组合和聚合而不是关联(与局部变量一样)。
是否有任何标准可以帮助开发人员决定何时使用实例变量以及何时使用局部变量。我已经用谷歌搜索了这个并且我查看了 MSDN,但我没有设法找到我的具体问题的答案。
您是否做过任何事情来使 ASP.NET 应用程序成为单线程的?否则默认情况下它是多线程的。
如果您在线程之间共享对象,则实例变量仅是多线程应用程序的问题。ASP.NET 应用程序的正常情况是每个线程都创建自己的对象实例,因此多线程不是问题。
如果需要在线程之间共享数据,将数据封装在一个对象中仍然是最好的方法。通过使用私有实例变量并通过方法或属性访问它们,您可以确保来自对象外部的所有访问都是同步的,因为对象中的代码可以完全控制数据的公开位置。
假设正在谈论网页和网页的实例变量,那么您不必担心多线程和线程安全。asp.net/web 服务器会处理这个问题。这篇msdn 文章讨论了 asp.net 提供的线程安全。
您实际上指的是静态变量。静态变量不是线程安全的(通常,除非您编写代码来同步对变量的适当访问)。相比之下,实例变量在 asp.net中是线程安全的,因为每个请求线程都将在其自己的副本上运行。
静态变量旨在存储需要在所有请求之间共享的数据。如果您没有这种情况,则不需要使用静态变量。如果你这样做了,已经有一些类已经提供了这个,比如Cache
类。