我有一个程序,我们想在某个时间点进行多线程处理。我们将 CSLA 用于我们的业务规则。在我们程序的一个位置,我们正在迭代一个 BusinessList 对象,并一次对一行数据运行一些完整性检查。当我们将行数增加到大约 10k 行时,运行该过程需要一些时间(大约一分钟)。自然,这听起来像是使用一点 TPL 并使其成为多线程的理想场所。
这些年来我已经完成了大量的多线程工作,所以我理解从单线程代码切换到多线程代码的陷阱。我惊讶地发现代码在 CSLA 例程中被炸毁了。它似乎与 CSLA PropertyInfo 类背后的代码有关。
我们所有的业务对象属性都是这样定义的:
public static readonly PropertyInfo<string> MyTextProperty = RegisterProperty<string>(c => c.MyText);
public string MyText {
get { return GetProperty(MyTextProperty); }
set { SetProperty(MyTextProperty, value); }
}
关于多线程和 CSLA,我有什么需要了解的吗?有没有在任何书面文件中找不到的警告(我还没有找到任何东西)。
- 编辑 - -
顺便说一句:我实现多线程的方式是将所有行放入 ConcurrentBag 中,然后生成 5 个左右的任务,这些任务只是从包中抓取对象直到包为空。所以我不认为问题出在我的代码中。