複雑な抽象構文ツリー パーサー/ジェネレーターを ANTLR を使用して実装し、各ノードの状態を一時的なウィンザー オブジェクトとして維持しています。したがって、パーサーが開始する前に、ツリー パーサーで使用される各状態の大きな XML である container.Install(FromXml) を実行します。
問題は、時間を短縮する試みとして、各行に 200 フィールドの 2000 行の表形式データの非常に重いハウスキーピング状態オブジェクトを使用して、少なくとも 30 レベルのツリーを順次下っていくということです。.NET の並列 for ループを次のように活用しようとしています。
// for each row
Parellel.For(0, N (i) =>
{
// for each column
Parellel.For(0, N, (i) =>
{
// use (i) in constructing a XML node tree using windsor container invoked states for
each node.
}
});
しかし、Parellel.For と従来の for ループに切り替えた時点で、状態でエラーが発生し始めました。追跡カウンター、バックトラッキング辞書が、既に呼び出された状態などを言って衝突しています。
私のコンテナ自体はシングルトンでラップされていますが、それは問題ですか? オブジェクトは一時的にオンザフライで作成されるため、 container.resolve() を呼び出すたびに新しいオブジェクトが作成されるわけではありません。resolve() と release() 呼び出しの間で動作する 2 つのスレッドは、それぞれが独自の状態オブジェクトを持つ必要があるため、問題になりますか??