2

問題

同じLAN内の異なるPC(OS:Windows XP、Windows 7)で実行されている同じC#アプリケーションの複数のインスタンスがあります。それらの間でいくつかの構成データを共有する必要があります。各プロセスには、データへの読み取り/書き込みアクセス権が必要です。私の雇用主は、これらの共有データを、これらのPCの1つの共有ディレクトリにあるファイルに保存することを主張しています。

可能な解決策:

  1. 排他的ファイルオープン:データはTXTファイルに保存されます(バイナリファイルとの間のシリアル化もオプションです)。各プロセスは、ファイルを開こうとするときにを使用File.Openします。FileShare.None取得するIOExceptionということは、ファイルがすでに使用されていることを意味するため、プロセスは待機して、後で再試行する必要があります。
  2. SQL Server CE組み込みDB:データはSDFファイルに保存されます。エンジンは最大256の同時接続(v3.5 SP2)を処理できますが、これで十分です。
  3. SQLite組み込みDB:データはSQLiteDBファイルに保存されます。ドキュメントにはSQLiteは機能すると記載されていますが、ネットワーク共有で使用すると信頼性が低下する可能性があります。
  4. 他の?

これを行うための好ましい方法は何ですか?

4

3 に答える 3

1

使用しているデータの種類を実際に説明していないので、答えはさまざまだと思います。

これに適切なDBMSを使用するのは、作業しているデータが一般にレコード/フィールド指向であると見なされる場合(そして、そうでない場合でもまれな状況下で)に最適です。この場合、ランタイムによってマルチユーザーの問題が軽減されるため、MSSQLCEをお勧めします。

SQLiteは、過去5年間で状況が変わった可能性がありますが、一般に単一のユーザー/アプリケーションデータベースと見なされていました(少なくともCで使用したときは)。.NET 4を使用している場合、混合フレームワークアプリケーションに慣れていない限り、私が見つけたものから使用できる無料のアダプターはほとんどありません。

データが設計上かなりフラットな状況(ログファイルなど)の場合にのみ、ファイルのロックを手動で監視しますが、ログのようなデータの場合は、オープンソースのログライブラリの一部を調べるでしょう。やれ。基本的に、データ構造を制御できるとおっしゃっていたので、このソリューションを使用しないように、データをより正規化/厳密に再設計することをお勧めします。

于 2012-01-22T00:51:24.177 に答える
1

最善の方法かどうかはわかりませんが、私はこれをCで何年も前に行ったことがあり、私にとってはうまく機能していました。

各プロセスは、ファイルの個人用コピーを読み取って作成し、それを処理します。

一定の時点で(プロセスの終了時、またはUIなどを介してトリガーされると)、各プロセスはファイルのコピーをマスタープロセスに送信し、共有ディレクトリ内の元のファイルの再構築と他のプロセスへの通知を担当します。リロードする必要があります。

各プロセスはファイルをリロードします(他のすべてのプロセスからの情報を含みます)。

もちろん、このソリューションでは、ファイル書き込みプロセスに、ファイルを再構築する方法と競合を解決する方法に関する知識が必要です(ただし、これはデータ形式によって異なります)

于 2012-01-22T00:52:15.023 に答える
1

Webサービスを作成し、プログラムにそこから構成をプルさせます。Webサービス内からファイルロックを制御でき、プログラムレベルで処理する必要はありません。これにより、設定の保存方法を変更する場合(たとえば、ファイルからデータベースに移動する場合)、プログラムに変更を加えることなくこれを実行できるという抽象化も可能になります。

于 2012-01-22T01:11:16.430 に答える