4

ファイルベースの自動インクリメント ID 値 ( intTXT ファイルに格納された値) を実装しようとしています。同時実行の問題を処理する最善の方法を考え出そうとしています。この ID は、コンテンツの一意の ID として使用されます。新しいコンテンツを保存すると、このファイルが開かれ、値が読み取られ、インクリメントされ、新しいコンテンツが保存され、インクリメントされた値がファイルに書き戻されます (次に使用可能な ID を保存するか、最後に発行された ID を保存するかは問題ではありません)。これが行われている間に、別のプロセスが発生し、新しいコンテンツを保存しようとする場合があります。前のプロセスは でファイルを開くFileShare.Noneため、最初のプロセスによってファイルが解放されるまで、他のプロセスはファイルを読み取ることができません。これが発生する可能性は最小限に抑えられていますが、それでも発生する可能性があります。

これが発生した場合、次の 2 つのオプションがあります。

  1. ファイルが利用可能になるのを待ちます -

ファイルがロックされているときに C# で File.Open の待機をエミュレートする

ここではミリ秒について話しているので、何か奇妙なことが起こってファイルが利用可能にならない限り、これは問題にならないと思います。この解決策は無限ループになるため、理想的な解決策ではありません

  1. ある種のキューを実装し、キュー内のファイルに対してすべての操作を実行します。私のユーザー エクスペリエンス要件は、ファイルの保存/変更時に、例外や何か問題が発生したことをユーザーに通知してはならないというものです。後で操作がキューで失敗したときに、非常に使いやすいユーザー インターフェイスを介してユーザーに通知されます。

これを書いている時点では、ソリューションは ASP.NET MVC アプリケーション内で (AJAX を介した同期および非同期の両方で) 機能するはずですが、可能であれば、Silverlight、Windows フォーム、または WPF アプリケーションでも機能する概念を使用する必要があります。

これらの 2 つのオプションに関して、どちらが優れていると思いますか?また、2 番目のオプションの場合、これを実装するためにどのような技術が考えられますか?

4

1 に答える 1

2

ReaderWriterLockSlimクラスは、共有リソースへのアクセスを同期するための優れたソリューションのようです。

于 2011-05-14T21:00:04.313 に答える