GraphEngineをしばらく使っていると、GraphEngineに対していくつかの操作をしている間に、スレッドがデッドロックしていることがよくあります。ネストされたコールは、確かにメニューにはありません。GraphEngineのデッドロック
if(Global.LocalStorage.Contains(cellID))
{ ... }
で
foreach(long cellID ...)
{
byte[] buffer;
// the next line will block on the 54th call...
Global.LocalStorage.LoadCell(cellID, out buffer);
}
私は電話を包ん非既存のセルIDを疑いしかし、今、このコールブロックindefinitly:しかし、今、私は奇妙な何かに遭遇しました。
これはバグですか?または
コールブロックはどの条件になりますか?
Cheerio、 Andreas。
おかげで、L.H.!私はあまりにも遠くに私の質問を略記するために謝罪する必要があります。私のCellIDは、別のCellTypeを反復処理したもので、LoadCellは最初の呼び出しではなく、54番目の呼び出しでブロックされました。だからこそ私は不規則性を疑った。しかし、はい、私はToList()もそれを回避しました。しかし、これは、存在する場合には、トリニティ内の巧妙な反復子の実装を無用にします。 –
@AndreasHassmann私はあなたが望むものを見て、私が見つけた別の解決策があります:イテレータ内のデータを更新しない場合、トリニティストレージを '読み取り専用'モードに設定するだけで、ロック。私の解決策は、最初にストレージを初期化し、ストレージをディスクに保存してから、ロードをロードしてストレージを反復する前に次のコードを入れます。 'TrinityConfig.CurrentRunningMode = RunningMode.Embedded; TrinityConfig.ReadOnly = true; Global.LocalStorage.LoadStorage(); ' –
もう一度お返事ありがとうございます。これは実行時に切り替えることができないかのようです私はデータベースに再接続する必要があります。あなたは梁氏ですか?トリニティについて一般的に、それを構築した人とここでは公共空間でぶつかることなく話したいと思っています... –