private static int counter = 0;
private static object lockObject = new object();
:
lock(lockObject)
{
counter++;
}
でも、どうやってもロックされないと思ったら、↓でした。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7287&forum=7
簡単に言うと、bin フォルダは ASP.NET において特殊な意味を持つフォルダであり、ここのファイルに更新などが発生すると、ASP.NET の環境が再起動されるようになっています(表現が微妙ですが)。binフォルダにログを出力していたため、インスタンスが再生成されていました。
これは、Webアプリケーションが使用しているDLLなどが更新された場合に対応するためです。.NET環境では、既にロードしたアセンブリを再ロードして動作を更新することが出来ないので、環境ごと再起動(再作成?)されます。
ですので、静的なデータも含めてリセットされます。
ちなみに、共有データはスタティックメンバ変数以外にApplicationオブジェクトでも扱えます。が、このオブジェクトは「基本的には下方互換性、あるいは初心者向けに用意されている機能だと考えた方がよい」そうです(「.NET エンタープライズWebアプリケーション開発技術大全」より)
0 件のコメント:
コメントを投稿