2011-07-25 9 views
20

私は、Webアプリケーションで使用される静的変数が、Webアプリケーション全体のすべてのユーザーに共有されていることを知っています。静的プライベート変数を使用するライブラリ(DLL)がある場合、そのライブラリを使用するすべてのアプリケーションはその変数の値を共有しますか?例えばライブラリ(DLL)の静的変数は、そのライブラリを参照するすべてのプロセスによって共有されていますか?

は、私は私のDLLに次のコードを持っていると言う:

private static bool isConnected = false; 

public static void Connect() 
{ 
    // TODO: Connect. 
    isConnected = true; 
} 

public static void Disconnect() 
{ 
    // TODO: Disconnect. 
    isConnected = false; 
} 

は、アプリケーションAには、私は Trueから isConnectedの値を設定 myDLL.Connect()を呼び出します。次に、私は同じことをするアプリケーションBをいくつか持っています。アプリケーションAが後で myDLL.Disconnect()を呼び出した場合、アプリケーションBは isConnectedFalseと見なします。なぜなら、2つのアプリケーションが同じDLLファイルを静的変数と共有しているからです。この場合、DLLファイルは文字通り同じファイルパス内の同じファイルになります。

(私は以前にそれが関連していないWebアプリケーションhere.について多少似て質問を。)

+0

興味深い質問 – Rahul

答えて

22

ありません、彼らはしません。それらは個別にAppDomainsにロードされ、お互いのインスタンスを見ることはできません。

同じ物理ファイルを参照する場合でも、各アプリケーションはアセンブリの専用のプライベートインスタンスを取得します。

+0

Xアプリケーションが同じDLLを使用している場合、各APPのアセンブリのXインスタンスが1つ存在するのでしょうか?ただ一度確認する。 – Rahul

+3

短い答え - はい。長い回答:ここのキーワードは 'AppDomain'です。 'X AppDomains'がある場合、' X'インスタンスがあります。デフォルトでは、各アプリケーションには 'X'アプリを意味する独自のAppDomainがあり、' X'インスタンスがあります。同じドメインに複数のアプリを読み込む方法はありますが、それは別の議論です。 – Mrchief

+1

ありがとう、これを知らなかった。その+1 – Rahul

関連する問題