1

ASP.NET MVC3 アプリケーションには Unity を使用しています。構成は web.config ファイルでのみ行われます。シングルトンを使用している以下の例を参照してください。コンストラクタインジェクションを使用しています。私たちのクラスの 99% では、シングルトンの有効期間プロパティを使用していません。パフォーマンスを調べたところ、同じリクエストに対して同じクラスの複数のインスタンスが複数回構築されていることがわかりました。リクエストごとに 3000 個のオブジェクトを生成するのではなく、約 200 個のオブジェクトに減らすことができることに気付きました。もっと大きな設計上の問題があるかもしれませんが、それはまた別の機会に。シングルトンを使用するユニティ クラス構成のかなりの部分を作成することを検討しています。

<typeAlias alias="singleton"
           type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
<type type="ITMSLogger" mapTo="TMSLogger">
    <lifetime type="singleton" />
    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
    </typeConfig>
</type>

質問:

  1. ライフタイム タイプをシングルトンにマークする場合、そのインスタンスは特定のユーザーまたはすべてのユーザー ベースに対してのみ共有されますか?
  2. これらをシングルトンとしてマークすると、ユーザーが一度に複数のリクエストを実行する際の問題を回避するために、メソッドの同期をセットアップする必要がありますか?
  3. 他に知っておくべきことはありますか?
4

1 に答える 1

3
  1. シングルトン インスタンスは、コンテナー インスタンス全体で共有されます。アプリケーションには単一のコンテナー インスタンスのみを含める必要があるため、実際には、シングルトンの有効期間によってグローバルに共有されるインスタンスが作成されます。

  2. はい、すべてのシングルトンは多くのスレッドからアクセスされる可能性があるため、スレッドセーフである必要があります。

  3. はい、コンテナーの構成に XML を使用しないでください。代わりに一連の規則を記述してください。

于 2012-02-15T18:45:40.840 に答える