0

ある時点でマルチスレッド化したいプログラムがあります。ビジネスルールには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つほどのタスクを生成することで、マルチスレッドを実装した方法。したがって、問題は私のコードにあるとは思いません。

4

1 に答える 1

1

お気づきのとおり、CSLA.NET フレームワークはスレッドセーフではありません。

特定の問題を解決するには、Wintellect Power Threadingライブラリを利用します。AsyncEnumerator/SyncGateコンボまたは単独ReaderWriterGateで。

Power Threading ライブラリを使用すると、共有リソース (CSLA.NET コレクション) への「読み取り」および「書き込み」要求をキューに入れることができます。キューに入れられた「読み取り」または「書き込み」要求をスレッドでブロックすることなく、共有リソースへのアクセスが許可されるのは、一度に 1 つの「書き込み」要求のみです。複数のスレッドから共有リソースに安全にアクセスするための非常に巧妙で非常に便利です。必要な数のスレッドをスピンアップでき、Power Threading ライブラリが CSLA.NET コレクションへのアクセスを同期します。

于 2011-02-28T16:03:19.737 に答える