2013-03-03 16 views
6

、およびNewSessionされていないことが非常に特定のは、私はこのラインを持っているnew WebSession()です"Well Sessionsがnullであるか、NewSession.SessionIDがnullです。"ただし、とNullReferenceException何がnull <code>Sessions</code>が<code>Dictionary<Guid, WebSession></code>ある

Sessions == null 
false 
NewSession.SessionID == null 
false 
NewSession == null 
false 

かなり間欠です。たぶん50回に1回起こります。それが起こるたびに、私はただちにSessions.Add(NewSession.SessionID, NewSession);を実行しても問題ありません。

WebSessionのコンストラクタは同期型であり、Sessionsは砂糖を添加していないバニラ辞書です。

私はこの時点でデューデリジェンスを行ったと確信しています。私のアプリケーションでは無害なことが起こり、それはきちんと閉じ込められて処理されますが、最初は何が原因か分かりません。

編集:私のWebSession: Dictionary<String, Object>を継承しますが、そのコンストラクタはbase()を呼び出すことはありませんので、それはだ場合、私は思ったんだけど - 私は、オブジェクトがAdd(..)

を行う前に、nullでないことを確認することができますので、まだかかわらず、それを説明しないだろう
+0

[.NETのNullReferenceExceptionは何ですか?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) –

+0

スタックトレースを表示するにはどうすればよいですか?通常はすべてが公開されています。 –

+0

メッセージにいくつかのアサートを追加して、メッセージが正確に何かを知らせるようにします。 – usr

答えて

7

ConcurrentDictionaryのようなスレッドセーフなコレクションを使用するか、独自の同期化を実装する必要があります。

複数のスレッドからDictionary<TKey,TValue>にアクセスしようとすると、heisenbugsが発生し、NullReferenceExceptionとして表示される可能性があります。

+0

+1 heisenbugs、私はそれを覚えておく必要がある:) – BradleyDotNET

関連する問題