假設您想要共享某個資源,例如ASP.NET Web應用程序中所有線程/會話中的類或變量。什麼是更好的?什麼是更好的:靜態變量V.S. Asp.NET應用程序會話?
1)一個靜態變量具有該靜態變量的線程安全訪問器?
2)還是一個ASP.NET應用程序會話變量?
假設您想要共享某個資源,例如ASP.NET Web應用程序中所有線程/會話中的類或變量。什麼是更好的?什麼是更好的:靜態變量V.S. Asp.NET應用程序會話?
1)一個靜態變量具有該靜態變量的線程安全訪問器?
2)還是一個ASP.NET應用程序會話變量?
如果您只有其中之一,則幾乎沒有區別。
如果你有幾個,你應該使用靜態變量而不是Application
變量。 Application.Lock
方法將鎖定全部Application
變量,而您可以爲靜態變量使用單獨的同步標識符,以便每個鎖僅影響訪問該特定變量的代碼。
這是一種常見的情況,您需要瀏覽多個頁面並收集數據。我將爲此場景使用Session對象。當完整的應用程序需要同一個對象時,應該使用靜態變量。
如果要保存的值取決於用戶,請使用Session。
這是真正的會話變量應該只用於如果你想存儲整個會話的值,但是如果你希望變量被初始化並在表單之間使用並且如果在應用可以通過整個應用程序爲同一個對象使用靜態變量。
靜態成員將提供更好的性能,但不利的方面是,它們不是線程安全的:
建議您存儲在應用程序類,而不是在應用程序對象的靜態成員的數據。這會提高性能,因爲您可以比訪問應用程序字典中的項目更快地訪問靜態變量。
來源:http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607
和:
這是http://stackoverflow.com/questions/303725/asp-net-application-state-vs-a愚弄的人-static-object – 2009-05-21 17:18:10
啊,好吧......我沒有看到......我該怎麼辦才結束這個問題呢? – 7wp 2009-05-21 17:33:26