2011-12-20 15 views
0

私はかなりのユーザーが同じXMLファイルにアクセスしています。ファイルにアクセスする最善の方法の下にコードがありますか?そうでない場合は、何が優先されますか?私は、ユーザーが "使用中のファイルエラー"または何かをその性質にすることを望んでいません。ASP.NETで読み書き中にXMLファイルをロックする

private readonly XDocument _xmlDocument; 

public SubCategoriesParser(string filePath) 
{ 
    if (filePath != null) 
     _xmlDocument = XDocument.Load(filePath); 
} 
+2

複数のユーザーがテキストファイルを同時に更新するのはなぜ理にかなっていますか? –

+0

あなたは何を意味するのかよく分かりません。 –

+0

これはWebアプリケーションです。同時に複数のユーザーにテキストファイルを更新させることは意味がありません(ユーザーごとに1つのファイルでない限り)。 –

答えて

1

あなたがロックして、ファイルへのアクセスを同期させることができ、またはReaderWriterLockSlim(あなたはそれが合理的になり、読者・ツー・ライターの比率のようなものを持っている必要があります)。

私はむしろ全体の質問を避けるでしょう。データベースは、このような複数の同時使用を処理するために構築されています。あなたのロジックを複数のファイルに分割することができれば、他の可能性もあります。

少なくとも、ファイルの破損を避けるには、SaveLoadをロックする必要があります。このようにしてロックを細かくすることは非常に慎重でなければならないでしょう。セーブは、操作全体を同期させていた場合に失われないデータを失うような方法でお互いを上書きするからです。

+0

ロック(this) { _xmlDocument = XDocument.Load(filePath); } これはいいですか? –

+0

決してこれを絶対にロックしないでください。 XDocumentをロードした後に起こった変更をスレッドで書き留めても大丈夫であることを確認するためにロジックを二重と三重にチェックしてください。全体をロックする必要があります(これはジャストインケースのロックではなく、実際の競合の多くのケースがあると厄介なことになります)。 –

2

System.Threading.ReaderWriterLockクラスを使用してシナリオを解決できます。このクラスは、1つのライターと複数のリーダーをサポートします。提供されたリンクには素晴らしい例があります。

+2

+1 ReaderWritedLockを提案しています;) – TheBoyan

+0

@BojanSkrchevski ReaderWriterLockSlimを超えるのはなぜですか?私は、あなたがはっきりとした理由がない限り、常にスリムなものを使用するべきだと言っています。 –

関連する問題