0

DLLを作成し、アイテムを「共有」(C#では静的)として宣言すると、最初に呼び出されたときにインスタンス化され、その後、そのオブジェクト参照が単一の参照として存続することを知っています。

したがって、一度設定された共有文字列プロパティを宣言すると、同じ値を取得するために再度呼び出すことができます。そして、そのスレッドセーフは、アプリケーションドメイン内の主要な関心事です。

アプリケーションドメインの外部で何が起こるか。アセンブリをグローバルアプリケーションキャッシュ(GAC)に配置すると、インスタンスはいくつ存在しますか?

たとえば、GACされた.dllの「MyFileName」という静的プロパティ。

次に、GACされた.dllを呼び出す2つのアプリケーションがあります。「MyFileName」のインスタンスはいくつ存在しますか?アプリケーション1からMyFileNameへの変更は、アプリケーション2が使用する値にコピーされますか?

4

1 に答える 1

2

dll は AppDomain 内でインスタンス化されるため、AppDomain と同じ数の異なるコピーが存在します。データは AppDomain 間で転送されません。DLL を GAC に配置すると、1 か所ですべてが使用できるようになるだけで、.net のメモリ モデルは変更されません。

于 2008-12-31T20:33:07.377 に答える