有人可以在ASP.Net应用程序的上下文中建议所有用户共用的共享/静态功能吗?
例如,如果你有一个功能
Public shared function GetStockByID(StockID as Guid) as Stock
该功能对您应用的所有当前用户是否通用?或者只是特定于当前用户的共享功能,并且仅在当前用户的上下文中共享?
更具体地说,我的问题是,除了数据库并发问题(如表锁定)之外,我还需要关注ASP.Net应用程序中共享函数中的线程问题吗?
在我脑海里;假设我的应用程序命名空间是MyTestApplicationNamespace。每当新用户连接到我的站点时,都会创建一个新的MyTestApplicationNamespace实例,因此所有共享功能对于该实例和用户是通用的,但在多个用户中并不常见。这是对的吗?
答案 0 :(得分:2)
在运行时不会“创建”任何命名空间的实例。可以把它想象成一种组织代码的方式,比如硬盘上的目录。
我认为共享方法只是一块可以在不实例化对象的情况下运行的代码。因此,每个用户都将通过代码运行自己的逻辑独立进程。
如果您想要每个用户共享一个对象,可以像下面这样完成:
public class cApp
{
static readonly cDB _cDB =
new cDB(ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString);
public static cDB DB
{
get
{
return _cDB;
}
}
}
这是第一次以线程保存方式触摸时实例化cDB类型的单个对象。它将被称为_cDB,可以通过属性DB在代码中使用。像:
cApp.DB.MyMethod();
这只会实例化一个实例,但每个用户将再次独立执行代码。因此,每个进程都会看到私有变量的值(如示例中的连接字符串),但设置局部变量的本地方法不会影响通过相同代码运行的任何其他进程。
答案 1 :(得分:0)
一切都是可见的!类,静态函数,类上的函数等。唯一不恒定的是加载的数据。
静态数据保留在请求之间(可能,应用程序可以刷新)。通常,根据请求,您可以加载所需的对象/数据,并以您想要的任何方式呈现它。
处理静态数据的静态函数需要了解线程问题。