に一度だけ実行し、私はこのように自分のWebアプリケーションを実行するためのHttpHandlerをカスタマイズし定義しました:メイクの方法は、マルチスレッドHTTPセッション
public interface IMyApp {
public void InitOnce();
public void Run();
}
public class MyApp1 : IMyApp {
public void InitOnce() {
// heavy-load some data on initializing
}
public void Run() {
}
}
//
// and there are MyApp2, MyApp3 .... MyAppN both implement IMyApp interface
//
public class MyHttpHandler : IHttpHandler, IRequiresSessionState {
public bool IsReusable { get; } = false;
public virtual void ProcessRequest(HttpContext ctx) {
var appID = ctx.Request.Params["appID"];
// create a fresh app instance depend on user request.
var app = (IMyApp)AppUtil.CreateInstance(appID);
/*
* TODO: I want some magics to make this method run only once.
*/
app.InitOnce();
app.Run();
}
}
としてMyAppXインスタンスが作成される動的に何度も、私がしたいです最初にMyApp1,2,3..Nが作成されたときに初めてInitOnce()を処理できることを確認してください。 (それぞれの静的コンストラクタにInitOnce()を入れるのと同じように)
これを行うための才能はありますか?
他のインスタンスは初期化が完了するまで待たなければならないので、 'InitOnce'の中で' lock'以外のことはできますか?あるいは、[シングルトン](http://stackoverflow.com/a/1131826/11683)があなたに適しているかもしれません。 – GSerg
thxと "Lock"は、この場合、InitOnce()の内部または外部のいずれかで期待どおりに動作します。しかし、どのような種類のロックを好むのですか?私は、パフォーマンスを最大限にし、すべての要求に対して「重いロック取得リリース」アクションを待つのを避けようとします。 @GSerg – ineztia
私は 'lock'キーワードを意味しました。パフォーマンスについては、たとえばhttp://stackoverflow.com/q/4673618/11683 – GSerg