有一個應用程序運行良好一段時間。突然之間,它開始在產品服務器上的某一行代碼處拋出intermitent「Object reference not set ...」錯誤。C#:晦澀對象引用錯誤
我在Visual Studio中啓動了應用程序,並在違規代碼行中用斷點進行調試,並複製了一個非常奇怪的行爲。
最初,當VS在代碼行中斷時,變量爲NULL,但如果我等待5秒左右,那麼變量不再爲NULL。這可以通過調用VS中的立即窗口中的變量來加快,這導致NULL字段立即填充或解決。這是生產服務器上錯誤的確切性質。
任何想法從哪裏開始?數據在命中該方法之前加載到變量中,但由於某些原因,在引用內存中的變量時存在延遲。開發和生產服務器上的可用內存堆。
真的很奇怪......需要幫助來找到一個地方開始解決它。
在此先感謝。
信息:.NET 3.5,VS 2008
代碼:
public static List<Model> CreateModel(List<subModelA> subModelAs, List<subModelB> subModelBs, int duration, bool isGroup) {
List<Model> result = new List<Model>();
try {
if (subModelAs != null && subModelAs.Count > 0) {
if (subModelBs != null && subModelBs.Count > 0) {
subModelBs.ForEach(b => {
subModelA a = subModelAs.Find(x => x.id == b.comp[0].subModelAComp.subModel.id);
result.Add(CreateNewModel(a, b, duration));
});
}
}
}
catch (Exception ex) {
throw ex;
}
return result;
}
下面一行是問題的根源:
subModelA a = subModelAs.Find(x => x.id == b.comp[0].subModelAComp.subModel.id);
如果有時候b爲NULL等次subModelAComp爲NULL。如果我斷點這一行,並在即時窗口,如果我執行「b.comp [0] .subModelAComp」它是NULL,然後我執行「B」,然後再次執行「b.comp [0] .subModelAComp」,它是不再是NULL。對「b」的調用似乎強制「subModelAComp」不爲NULL。吸氣器中沒有可能導致這種改變的代碼。
***應用程序沒有線程化。沒有多線程實現****
應用程序是多線程的嗎?這聽起來像是一場競賽狀況的發生,你在突破點暫停,給人口帶來時間。 – 2010-08-14 09:43:30
你可以發佈代碼發生異常嗎? – Oded 2010-08-14 09:43:34
歡迎來到奇妙的同步問題世界。 – erikkallen 2010-08-14 12:49:00