ある時点でマルチスレッド化したいプログラムがあります。ビジネスルールにはCSLAを使用しています。プログラムの1つの場所で、BusinessListオブジェクトを反復処理し、一度に1行ずつデータに対して健全性チェックを実行しています。行数を約1万行に増やすと、プロセスの実行に時間がかかります(約1分)。当然、これは少しのTPLを使用して、これをマルチスレッドにするのに最適な場所のように聞こえます。
私は何年にもわたってかなりの量のマルチスレッド作業を行ってきたので、シングルスレッドコードからマルチスレッドコードに切り替える際の落とし穴を理解しています。CSLAルーチン自体の中でコードが爆撃されたことに驚きました。CSLAPropertyInfoクラスの背後にあるコードに関連しているようです。
すべてのビジネスオブジェクトプロパティは次のように定義されています。
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つほどのタスクを生成することで、マルチスレッドを実装した方法。したがって、問題は私のコードにあるとは思いません。