3

我已經編寫了一個WCF Web服務,它接受XML文件並將它們存儲到數據庫中。一切工作正常「低負荷」,但在高負荷下,我得到了一些意想不到的行爲,因此,我一直無法找出究竟是什麼問題。有人有建議嗎?EntityFramework中的空引用異常ObjectStateManager.DetectConflicts

這是我看到的日誌「有時」例外 - 就像25次中有10 000:

Exception: System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.Data.Objects.ObjectStateManager.DetectConflicts(IList`1 entries) 
    at System.Data.Objects.ObjectStateManager.DetectChanges() 
    at System.Data.Entity.Internal.InternalContext.GetStateEntry(Object entity) 
    at System.Data.Entity.DbContext.Entry(Object entity) 
... rest of my stacktrace 

我看到這種情況每一次在一,而和我目前正在研究這是否與併發性有關(某些其他線程可能在同一個實體上工作)。有人可能會給我一些指引,看看在哪裏尋找?

+0

這是EF中的一個錯誤,或者您運行的是舊版本。源代碼可以在這裏找到:http://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework/Core/Objects/ObjectStateManager.cs你可以檢查你是否有一個工具,如.NET Reflector或ILSpy。 –

+0

我在這個應用程序上運行NuGet包EF 5,但我認爲它回落到4.1.1。因爲它的.NET 40.所以基本上我應該升級到.NET 4.5和EF 5或6.嗯...好吧 - 我會檢查與OPS。 –

回答

0

NullReferenceException當您嘗試使用值爲Nothing/null的引用變量時發生。

當該值沒有什麼參考變量/無效,這意味着 它實際上沒有保持到在堆存在任何物體 的實例的引用。

我不知道問題是什麼,但我相信它與線程。由於它爲少量用戶工作正常。當負載增加時,它可能會使用多個線程來提高性能。當線程異步執行時,出現此問題的機會更大。

我可以提供的解決方案是自定義指定線程和同步對象。可能它會解決問題。

+0

謝謝 - 爲您添加。事實上 - 有多個線程在運行。一次超過10個。我使用http://unitywcf.codeplex.com/和HierarchicalLifetimeManager來管理我的datacontexts的生命週期。上下文創建每個線程,每個請求和後處理。如果負載低於每秒10次,則只有當負載達到最高值時纔會發生任何事情。所以我的猜測是,在正常執行路徑中,我不是負責nullreference異常的人。 –

+0

@spike可能是管理線程的人負責。但是你必須指出哪些部分必須通過線程。 – Dileep