我有一个使用 ANTLR 实现的复杂抽象语法树解析器/生成器,并且我将每个节点的状态维护为瞬态温莎对象。因此,在解析器启动之前,我执行 container.Install(FromXml),它是每个状态的大 XML,将在树解析器中使用。
问题是我按顺序向下树至少 30 个级别,其中包含非常繁重的内务管理状态对象,用于 2000 行的表格数据,每行 200 个字段,以便尝试减少时间,我试图利用 .NET 的并行循环作为:
// 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() 调用之间工作的两个线程是否会因为每个线程都应该有自己的状态对象?