1

クラス「B」と関数「C」の.NETdllがあるとします。

次に、dllを参照するマルチスレッドの.NETプログラムがあります。

各スレッドはクラス「B」をインスタンス化し、関数「C」を呼び出します。インスタンス化されると、クラス'B'はそれ自体のすべての変数をヒープに割り当てます。これらの変数は、関数'C'によって使用されます。

これにより、クラスの個別のインスタンスが作成されますか(つまり、メインプログラムの各スレッドで関数「C」を呼び出しても安全ですか)、または何らかの方法でDLLを動的にロードする必要がありますか。

(言い換えると、.NET DLLはWin32LoadLibrary関数(参照カウント)のように動作しますか。この場合、1つのdllに異なる名前を付けてから、それらをロードして、個別のインスタンスを作成する必要があります。)

4

2 に答える 2

1

.Netでは、型の解決はバイナリ名ではなく、アセンブリ名に基づいています。したがって、プロセスメモリにdllのコピーを2つ取得できたとしても、クラスの型定義はB同じであり、同じ静的変数インスタンスを使用します。

ただし、各スレッドが個別のappdomainにアセンブリをロードする可能性があります。その場合、各appdomainは静的変数の独自のインスタンスを取得します。欠点は、コードがメソッドを呼び出すたびにアプリドメインの境界を越えることCです。

于 2010-09-03T23:13:18.867 に答える
0

スレッドローカルストレージを探している可能性があります。それが目的の場合は、フィールドでThreadStatic属性を使用してください。

于 2010-09-09T09:16:17.230 に答える