2017-12-04 7 views
-1

クラスをインスタンス化してアプリケーション変数に保存して使用し、各要求でインスタンス化する必要はありませんか?アプリケーション変数のインスタンス

例:DbContextをインスタンス化し、必要に応じてアプリケーション変数から直接使用します。

これは実際のパフォーマンスの向上を意味しますか?グローバルASAで



    protected void Application_Start() 
    { 
    Application["db"] = new Models.dbContext(); 
    } 

、その後の使用:必要に応じて



    db = (dbContext)HttpContext.Current.Application["db"]; 

+3

[mcve]を表示できますか? – gunr2171

+1

http://wiki.c2.com/?PrematureOptimization – rene

+1

マイクロソフトでは、次のことを推奨しています。「Webアプリケーションを使用する場合は、要求ごとにコンテキストインスタンスを使用してください。 詳細情報:https://msdn.microsoft.com/en-us/library/jj729737(v=vs.113).aspx – gonxalo

答えて

1

DbContext sがほとんど常にインスタンス化され、廃棄されなければなりません。接続プールや様々な裏の最適化により、これは非常に効率的です。 Otohの場合、HttpClientを使用している場合は、すべてのコールに対して1つのコールを作成することを目指してください(そうでない場合は、接続を維持できません)。 「アプリケーション」変数に格納するか、グローバル静的変数として格納するかは、あなた次第です。しかし、HttpClientは例外です。アプリケーションの存続期間中状態を維持する必要がないか、実装固有の理由がある場合は、グローバルスコープおよび/またはライフタイムの変数を持つことを避けるべき理由があります。

関連する問題