Animal
いくつかのシミュレーション プログラムで使用する基本クラスがあります。この場合Animal
、1 回の実行で最大 500 秒になる場合があります。Animal
各実行は、「時間ステップ」ごとにそれぞれが何かを行うように設定されています。だから私は動物のリストをループして、DoTimeStep
すべての時間ステップが実行されるまでそれぞれを呼び出します。
各Animal
クラスには、シミュレーションの「時間ステップ」ごとにデータを書き出すための独自のロガー クラスがあります。このようにして、それぞれAnimal
に独自のログ ファイルがあります。仮想マシンで実行しようとするまで、永久に (3 年間) 正常に動作しました。次に、何らかの理由で、ロガー参照が「時間ステップ」に対して時々 null になり、次回はそこに表示されます。本当に奇妙な部分はStreamWriter
、ロガーの内部がファイルの場所を見失うことがないように見えることです。その時間ステップの行を書き出すのをスキップするだけです。また、エラー ログにはNullReferenceException
、Logger
クラスの a が表示されます。
この動作のパターンが見つかりません。Animal
クラスは破棄および再作成されませんでした。ロガーはAnimal
コンストラクターで作成され、 で破棄されIDispose
ます。この問題のデバッグを開始する方法についてのアイデアはありますか?
編集:これを再現できるのは3匹の動物だけなので、500個の開いているファイルはそうではありません。しかし、試してくれてありがとう。
編集: Null Exception のエラーをキャッチしたときに何をすべきかわかりません。私はすでにそれを捕まえていましたが、なぜそれが起こっているのかを知る方法がわかりません. 鈍く見えてすみません。余談ですが、Thread.Sleep(300) を 10000 ループで試して、私が気付いていなかったある種のレースが行われているかどうかを確認しました。ループ内で not null になることはありませんでした。しかし、3 秒後に他の 2 匹の動物を循環して戻ってきたとき、それはもはや null ではありませんでした。