簡體   English   中英

如何在ASP.NET緩存中存儲類實例(幫助程序類)?

[英]How to store class instance (helper class) in ASP.NET Cache?

我有一個使用Activator.CreateInstance()方法創建的類實例。 該類實例包含在整個應用程序中經常使用的輔助方法。 為了避免多次創建實例,我只是在考慮實現適當的緩存機制。

應考慮以下因素:

1)我不能使用靜態類和方法。

2)每個App Domain大約有6個實例(每個類1個實例)。

您的建議將不勝感激!

如果要避免多次創建它,請不要使用ASP.Net緩存對象。 緩存對象明確地不保證您放入的任何內容都將保留在那里。 實際上,如果服務器需要釋放資源,這是首先要被蠶食的事情之一。

更好的選擇是使用HttpApplicationState對象,該對象應用於存儲所有會話都需要全局訪問的對象。 如果正確訪問它,它也具有內置的線程安全性。

要做的代碼如下:

HttpContext.Current.Application.Lock();
HttpContext.Current.Application["myObject"] = myObject;
HttpContext.Current.Application.Unlock();

利用它只是

var myObject = (MyObject)HttpContext.Current.Application["myObject"];

使用單例模式:

class MySingleton {

     private static MySingleton instance;

     public MySingleton {
          if(instance != null)
              // One already created, the only call to this
              // should come through Activator
              throw...
          instance = this;
     }

     public static MySingleton GetInstance() {
          if(instance == null) instance = new MySingleton();
          return instance;
     }

}

激活器使用公共構造函數。 然后,您仍然可以通過GetInstance()檢索實例。

廣告1)實例的靜態容器如何? 遵循單例模式?

廣告2)6個單例或一個靜態通用單例類。

PS:我猜想靜態限制僅適用於助手類本身嗎?

PPS:使用HttpContext.Current.Application的方法幾乎相同,只是速度較慢。

聽起來像依賴注入容器的情況。 無論您選擇哪一個,它們都像單例一樣支持緩存,它將為您完成Activator.CreateInstance部分。

我喜歡NInject,因為它很簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM