3
使用GraphEngine有一段時間我經常在對GraphEngine執行一些操作時發現自己有死鎖線程。嵌套調用絕對不在菜單上。但現在我遇到一些奇怪的事情:GraphEngine中的死鎖
foreach(long cellID ...)
{
byte[] buffer;
// the next line will block on the 54th call...
Global.LocalStorage.LoadCell(cellID, out buffer);
}
疑不存在的CellID我的調用包裝與
if(Global.LocalStorage.Contains(cellID))
{ ... }
但是現在這個調用塊indefinitly。
這是一個錯誤?或
呼叫阻塞在哪些情況下會發生?
Cheerio, Andreas。
謝謝,L.H.!我必須道歉,因爲我的問題過於簡單。我的CellID來自迭代不同的CellType,LoadCell在第54次呼叫時被阻塞,而不是第一次。這就是我懷疑違規的原因。但是,我也用ToList()來規避它。但是,如果它們存在,這將使Trinity內的任何聰明的迭代器實現都無用。 –
@AndreasHassmann我看到你想要什麼,我找到了另一個解決方案:如果我們不想更新迭代器中的任何數據,我們可以將Trinity存儲設置爲「只讀」模式,這將啓用任意操作而不用擔心鎖。我的解決方案是首先初始化存儲並將存儲保存到磁盤,然後在加載和迭代存儲之前放置這些代碼: 'TrinityConfig.CurrentRunningMode = RunningMode.Embedded; TrinityConfig.ReadOnly = true; Global.LocalStorage.LoadStorage();' –
再次感謝,L.H.這聽起來好像它不能在運行時切換,對吧?我將不得不重新連接到數據庫。你是梁何?我想和一個建立它的人討論一下Trinity,而不會在這裏的公共空間亂扔垃圾...... –