我有一个Animal
在一些模拟程序中使用的基类。在这种情况下,一次运行可能长达 500Animal
秒。每次运行都设置为让Animal
每个“时间步”都做一些事情。所以我只是遍历动物列表,调用DoTimeStep
每一个,直到完成所有时间步骤。
每个Animal
类都有自己的记录器类,用于为模拟中的每个“时间步”写出数据。这样每个Animal
人都有自己的日志文件。它一直运行良好(3 年),直到我们尝试在虚拟机上运行它。然后出于某种原因,记录器引用每隔一段时间就会在“时间步”中为空,然后下一次它将在那里。真正奇怪的部分是StreamWriter
记录器内部似乎永远不会忘记其文件的位置。它只是跳过写出该时间步的行。并且错误日志显示NullReferenceException
在Logger
类上。
我找不到这种行为的任何模式。该类Animal
没有被销毁和重新创建。记录器在Animal
构造函数中创建并在IDispose
. 关于如何开始调试此问题的任何想法?
编辑:我只能重新创建 3 只动物,所以 500 个打开的文件不应该是它。但是感谢您的尝试。
编辑:当我发现 Null Exception 的错误时,我不确定我应该做什么。我已经抓住了它,但我不知道如何找出它发生的原因。抱歉显得迟钝。顺便说一句,我确实尝试了 Thread.Sleep(300) 10000 次循环,看看是否有某种我不知道的比赛正在进行。它在循环中从未变为非空。但是 3 秒后,当我骑车穿过其他两只动物并回来时,它不再为空。