GACに含まれるアセンブリのSharedの処理
-
03-07-2019 - |
質問
DLLを作成し、アイテムを「共有」として宣言すると、 (C#の静的)最初に呼び出されたときにインスタンス化され、そのオブジェクト参照は単一の参照として存続します。
したがって、一度設定された共有文字列プロパティを再度呼び出すと、同じ値を取得できます。そして、そのスレッドセーフは、アプリケーションドメイン内の主要な関心事です。
アプリケーションドメインの外部で発生すること。アセンブリをグローバルアプリケーションキャッシュ(GAC)に配置すると、いくつのインスタンスが存在しますか?
たとえば、" MyFileName"という静的プロパティGACされた.dll内。
次に、GAC'ed .dllを呼び出す2つのアプリケーションがあります。 " MyFileName"のインスタンスの数存在するだろうか? Application OneからMyFileNameへの変更は、Application Twoが使用する値にコピーされますか?
解決
dllはAppDomain内でインスタンス化されるため、AppDomainと同じ数の異なるコピーがあります。データはAppDomain間で転送されません。 DLLをGACに配置すると、すべてを1か所で利用できるようになります。.netのメモリモデルは変更されません。
所属していません StackOverflow