2012-02-07 7 views
1

私は次の処理を行いC#のコンソールアプリケーションをデプロイする場合:C#複数のコンソールアプリケーションが実行され、分離

  • は、SQL Server(メッセージ(ActiveMQの)
  • メッセージの内容を処理し、データベースに結果読み書き)

これを複数回実行すると問題がありますか?バッチファイルを作成して100個のインスタンスを実行したらどうなりますか?各インスタンスが同じ共有DLLを使用していると仮定すると、競合が発生しますか? Apache.NMS.ActiveMQ。

もう1つの方法は、アプリを複数回デプロイすることですが、重複したフォルダを管理する必要はありません。私は現時点でスレッド化を避けていますが、将来のさらなる開発のためのオプションになります。

これらのDLLで何が起きているのかを明確にし、スレッド型の競合がないことを確認してください。他のインスタンスの処理結果をデータベースに書き込む1つのインスタンス...

+0

同じアプリケーションの100インスタンスを実行して、何を達成したいですか?すべてのインスタンスが同じ構成で実行されているか、完全に同一ですか? – Glenn

+0

複数のプロセスが同じメッセージキューを吸い込み、同じdbaseテーブルを更新することで問題になる方法はたくさんあります。プロセスの1つをクラッシュさせるだけでは、回復不可能なデータ損失でかなり悲惨にならなければなりません。しかし、それを試してみてください。少なくともそれがより速く走るかどうかは分かります。それはかなりありそうもない。 –

+0

@Glennは完全に同一ですが、試行する理由は、最終的にNinjectを使用して実行時に同じインタフェースを実装する別のDLLにロードすることになります。 – finoutlook

答えて

2

いいえ、記述したとおり、同じDLLファイルを複数のプロセスにロードすることは問題ありません。プロセスがファイルなどの共有リソースへの排他的アクセスを必要とする場合は、同じアプリケーションの複数のインスタンスを実行する際に問題が発生します。データベースへの書き込みに関しては、複数のクライアントがデータを上書きせずにデータを書き込むようにアプリケーションを設計したり、データのドメイン整合性に何らかの矛盾が生じたりしない限り問題はありません。

しかし、必要な並行性があればアプリケーションをマルチスレッドにするか、必要な分離であればアプリケーションドメインにすることを強くお勧めします。複数のプロセスを実行することは、これらの2つのオプションよりもリソースの面ではるかに高価です。

+0

あなたの答えをありがとう、私はAppDomainsを調べるつもりです。私は実際に同じアプリケーションを複数回配備するルートを辿ることはできませんが、そのような問題を知りたかっただけです。 – finoutlook

関連する問題