1

現在 WinForms で DataSets を使用しているプログラムを書き直して、それを WPF に移行したいと考えています。現在、プログラムはユーザーがログインするために Citrix を使用しています。誰かがデータに対して何らかのアクションを実行している場合、メイン スレッドは変更の BI をコミットしてサーバーに送り返すか、サーバーから新しいデータ (または変更されたデータ) を取得してキャッシュに追加します。現在の問題は、ユーザーがデータを処理したり、サーバーからメッセージを受信したりするたびに、ロックとロック解除が頻繁に使用されることです。クライアント側でマルチスレッドで動作するデータ エンティティまたは何らかの方法を探しています。つまり、他のすべてのユーザーとその変更と同期しながら、すべてのスレッドがデータの BI をコミットし、サーバーと通信できるようにしたいと考えています。

私はEFを見ましたが、スレッドセーフではありません。つまり、サーバーから更新が到着したときに、EFをロックして更新する必要があり、ユーザーがEF内のデータで作業するときに再度更新する必要があります。

プログラマーが毎回データをロック/ロック解除することなく、より簡単に行う方法はありますか?

4

1 に答える 1

2

マルチスレッド アプリケーションを作成している場合、ロックを回避することはできません。

EF の使用中に適用できるものはいくつかあります。

  1. ロックで一意のコンテキストを使用しないでください (シングルトン パターンなし)。
  2. リクエストごとに 1 つのコンテキストといくつかの同時実行制御システムをインスタンス化して破棄する
  3. コンテキストのロックを可能な限り回避します。
于 2012-12-26T14:13:28.720 に答える