0

1 台のマシン上で複数のアプリケーションを実行し、そのマシン上に MSSQL サーバーも実行しました。

アプリケーションには、WPF、WCF サービス、MVC アプリなど、さまざまな種類があります。それらはすべて、SQL サーバー上にある唯一のデータベースにアクセスします。アクセス モードは、単純な LinQ-to-SQL クラス呼び出しです。

各データベース concact で、いくつかのクエリ、いくつかのチェック、およびいくつかの db-writes を作成します。

私の質問は、単純なインスタンスを使用して、これらのトランザクション スコープ内の呼び出しが同時に実行されていない (スレッドとプロセスが安全である) ことを確認できますか?TransactionScope

4

1 に答える 1

0

トランザクション スコープを使用すると、明らかに特定の接続がトランザクションになります。トランザクション スコープ自体を使用しても、マシン上で同じことを同時に実行している 2 つの異なるプロセスが停止することはありません。実行されたすべてのアクションが確実にコミットまたはロールバックされます。各プロセスが参照するデータのビューは分離レベルによって異なります。分離レベルはデフォルトでシリアライズ可能であり、簡単にデッドロックにつながる可能性があります。より実用的な分離レベルはコミットされた読み取りです。できればスナップショット分離を使用すると、デッドロックと待機時間がさらに短縮されます。

アプリケーションの 1 つのインスタンスのみが何かを実行していることを確認する場合は、ミューテックスを使用するか、すべての異なるプロセスが取得を試み、必要に応じて待機するデータベース ロックを使用できます。

于 2012-07-11T11:42:31.203 に答える