我有一個Animal
基類,我在一些模擬程序中使用。在這種情況下,運行中可能會多達500個Animal
。每次運行都設置爲讓每個Animal
每個「時間步」執行一些操作。因此,我只是循環列出動物列表,每個動物列表都要撥打DoTimeStep
,直到所有時間步驟完成。如何在C#中調試不一致的空引用?
每個Animal
類都有自己的記錄器類來爲仿真中的每個「時間步長」寫出數據。這樣每個Animal
都有自己的日誌文件。它運行良好(3年),直到我們試圖在虛擬機上運行它。然後,無論什麼原因,每隔一段時間,記錄器引用將爲「時間步長」爲空,然後下一次它將在那裏。奇怪的部分是記錄器內部的StreamWriter
似乎永遠不會失去其文件的位置。它只是跳過寫出該行的時間步驟。錯誤日誌在Logger
類上顯示NullReferenceException
。
我找不到這種行爲的任何模式。 Animal
類未被銷燬並重新創建。記錄器在Animal
構造函數中創建,並在IDispose
中銷燬。關於如何開始調試此問題的任何想法?
編輯:我可以重新創建只有3只動物,所以500個打開的文件不應該是它。但謝謝你的嘗試。
編輯:我不知道我應該做什麼,當我趕上空例外的錯誤。我已經抓住了它,但我無法弄清楚如何找出它發生的原因。對不起,看起來很鈍。順便說一句,我嘗試了Thread.Sleep(300)10000循環,看看是否有某種比賽正在進行,我沒有意識到。它在循環中永遠不會變爲空。但是3秒鐘後,當我通過其他兩隻動物循環後回來,它不再爲零。
你在使用什麼虛擬機?我們能否看到引發異常的記錄器代碼? – 2009-02-25 04:17:19