2010-04-30 36 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

一切都是可見的!類,靜態函數,類中的函數等。唯一不是常量的是加載的數據。

靜態數據保留在請求之間(也許應用程序可以刷新)。通常,根據請求,您可以加載所需的對象/數據,並以您想要的任何方式呈現它。

對靜態數據起作用的靜態函數需要注意線程問題。