- PR -

ローカル変数は、絶対に共有されない・・・?

投稿者投稿内容
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2003-06-12 08:53
引用:

V2000sv01さんの書き込み (2003-06-11 19:24) より:
・Asp.Netは「サービス」として動くアプリケーションなので、モジュールブロックは特殊である。



ASP.NETには限らないです。
Windowsフォームであろうと、コンソールアプリケーションであろうと、マルチスレッドを使用すると、
顕在化します。
たまたまASP.NETがマルチスレッドのかたまりなので、現象として確認されやすい、だけです。

引用:

小野@EACさんの書き込み (2003-06-12 07:50) より:
Public変数、Private変数といったメンバそのものは共有されるけど、
ローカル変数は共有されない、でいいんでしたね。



原則は、これでよいのですが、例外があったりします。
具体的には、関数/サブルーチン内部で「Static」宣言したローカル変数は、共有されます。
以下は、簡単な確認プログラムです。

 Module Module1
  Public nPublic As Integer = 0 ' ←←←←←←←←←←← 共有される
  Private nPrivate As Integer = 0 ' ←←←←←←←←←←← 共有される

  Public Function PublicMember(ByVal num As Integer) As Integer
   nPublic = nPublic + num
   Return nPublic
  End Function

  Public Function PrivateMember(ByVal num As Integer) As Integer
   nPrivate = nPrivate + num
   Return nPrivate
  End Function

  Public Function LocalDim(ByVal num As Integer) As Integer
   Dim localDim As Integer = 0 ' ←←←←←←←←←←← 共有されない
   localDim = localDim + num
   Return localDim
  End Function

  Public Function LocalStatic(ByVal num As Integer) As Integer
   Static localStatic As Integer = 0 ' ←←←←←←←←← 共有される
   localStatic = localStatic + num
   Return localStatic
  End Function
 End Module


# VBなんか嫌いだ〜
金星太郎
会議室デビュー日: 2002/12/12
投稿数: 7
お住まい・勤務地: 新潟市
投稿日時: 2003-06-12 18:37
たくさんのレスありがとうございます。
ものわかりが悪く、いろいろお手数かけました。
Local変数はStaticにしない限り共有されることは無いのですね。
安心しました。
開発しているWebApplicationは、2Gのメモリ・2.4GHzのCPUのマシンでも
コンパイルがしばしば通らないぐらい大きく、画面は280個以上、
取り込んでいるDLLは40個以上で、それらはモジュールブロックの中の
共通関数を使っていたのです。
修正しないで済む方法はないか・・・と鬱々していたのですが、
ほっとしました。
良かったです。

スキルアップ/キャリアアップ(JOB@IT)