[英]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.