私は多層アプリケーションに取り組んでおり、3つの方法で長時間実行プロセスを最適化する必要があります。
- EF更新の同時実行性の問題を回避します。
- 速度の向上。
- 進行状況をユーザーに通知します。
実際、クライアントコードは、すべての作業(更新するエンティティの数の評価、更新するエンティティのクエリ、更新、最後にデータベースへの保存)を実行するメソッドを使用してWCFサービスを呼び出します。
プロセスは非常に長く、プロセスが完了すると最終結果を除いてユーザーに何も返されません。ユーザーは、何が起こっているのかわからなくても、最大10分間待機フォームの前にとどまることができます。
クエリされるエンティティの数と深さが非常に大きくなる可能性があり、OutOfMemoryExceptionsが発生することがあります。一度に100個のエンティティの更新を処理するようにサービスメソッドを変更する必要があったため、DbContextは頻繁に更新され、大きくなりすぎません。
私の実際の問題は、エンティティが更新されるたびにユーザーに通知できないことです。これは、サービスメソッドがプロセス全体を実行してから、結果をユーザーに返すためです。
デュプレックスサービスの実装について読みましたが、2つの異なるコールバックをユーザーに返す必要があるため(1つは更新するエンティティの数を返すコールバック、もう1つは各エンティティの更新結果のコールバック)、一般的なコールバックインターフェイスとそれは少し厄介になっています(まあ、私の好みに)。
評価するエンティティの数を返す1つのWCFサービスメソッドと、更新するすべてのエンティティに対してヒットする単純なエンティティ更新結果を返す別のWCFメソッドがある方がよいのではないでしょうか。私のDBContextは、単一のエンティティが更新されている間だけ存続するので、あまり大きくならないでしょう。これは良いことだと思います。ただし、そのプロセス中にWCFサービスに頻繁にアクセスすることを心配しています。
あなたはどう思いますか?あなたは何を提案できますか?