2010-04-30 37 views
1

有人可以在ASP.Net应用程序的上下文中提供建议,它是所有用户共有的共享/静态功能吗?特定于共享/静态功能的ASP.Net体系结构

举例来说,如果你有一个函数

Public shared function GetStockByID(StockID as Guid) as Stock 

是常见的应用程序的所有当前用户该功能?或者是仅针对当前用户的共享功能,并且仅在当前用户的情况下共享?

所以更具体地说,我的问题是,除了数据库并发性问题,如表锁,我是否需要关注自己在ASP.Net应用程序中的共享函数中的线程问题?

在我的脑海里;假设我的应用程序名称空间是MyTestApplicationNamespace。每次有新用户连接到我的站点时,MyTestApplicationNamespace的新实例都会创建,因此所有共享函数对于该实例和用户而言都是通用的,但在多个用户中并不常见。它是否正确?

回答

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(); 

这将只有一个实例实例化,但每个用户都会独立执行代码。所以每个进程都可以看到私有变量的值(如示例中的连接字符串),但是设置局部变量的本地方法不会影响通过相同代码运行的其他进程。

+0

非常感谢深入的答案... – 2010-04-30 04:27:14

0

一切都是可见的!类,静态函数,类中的函数等。唯一不是常量的是加载的数据。

静态数据保留在请求之间(也许应用程序可以刷新)。通常,根据请求,您可以加载所需的对象/数据,并以您想要的任何方式呈现它。

对静态数据起作用的静态函数需要注意线程问题。