2010-11-22 14 views
2

XDocumentクラスのLoad()メソッドとSave()メソッドを使用してxmlファイルを読み込んで編集するアプリケーションで作業しています。別のアプリケーションやアプリケーションの別のインスタンスが実行されている場合、メモリ内にある場合、他のアプリケーションが行った変更を1つのドキュメントが上書きする可能性があります。xdocumentは継続的に更新されません(reLoading)。同時実行プログラムは、xmlファイルの同じセクションを同時に編集することはありません。この問題を解決する最良の方法は何ですか?私はすべての変更を行う前にLoadを行うべきですか、よりエレガントなアプローチがありますか?C#でxmlファイルを同時に編集する

+0

編集中にファイルをロックすることはできますか?ファイルの単一インスタンスを使用していますか? – genericuser

+1

@ Priya10シングルインスタンスはスレッドの安全性を保証しません。 – dexter

+0

@pnya:ファイルをロックしても問題が解決しない場合は、いつかロックを解除する必要があります。 –

答えて

3

ベストソリューションはXMLを使用しないことです。

(小)データベースを使用してください。

マルチユーザの状況で任意の種類のテキストファイルを使用するのは難しいですし、固定長の(固定)位置のレコード(行)があれば、それが異なるセクションにあるという事実は、 。 XMLはこれを提供しません。

ロード・ビフォー・エディットを行うと、問題の発生頻度が少なくなります。変更が失われる可能性は常にあります。ファイルシステムレベルで競合条件が発生します。それを動作させるには、ファイルをロックするスキームを使用する必要があります。あなたはこれのために余分なファイルが必要になります。

+0

sqliteのように、それのためのado.net dataproviderがあります:[System.Data.Sqlite](http://sqlite.phxsoftware.com/) – Femaref

+0

@Femarefこのアプリケーションは、多くのマシンに展開されています。ターゲットマシンにsqliteをインストールしてデータベースを作成するプロセスはどれくらい難しいですか? – PICyourBrain

+0

@Femaref私のプログラムはどのくらいの大きさになりますか? – PICyourBrain

0

ファイルを変更できる複数のプロセスについて話しています。そのデータを共通ストア(MS SQL)に格納する代わりにファイルを保持したい場合は、いつでも1つのアプリケーションだけがファイルにアクセスできるようにmutexを実装する必要があります。

関連する問題