2

私のアプリケーション (c# 3.5) では、1 つの xml ファイル (読み取りと書き込み) に非常に頻繁にアクセスするさまざまなプロセスがあります。ファイルにアクセスするコードは、かなりの数の他のアプリケーションによって参照されるアセンブリに配置されます。たとえば、Windows サービスは MyFileReaderWriter クラス (前述のアセンブリにある) をインスタンス化し、このクラスの読み取り/書き込みメソッドを使用する場合があります。

最小限のロックでファイルを読み取り、作成/追加するための最良/最速の方法を探しています。データは重要であるため、ファイル データをキャッシュし、新しいコンテンツを定期的にフラッシュすることはできません。

ファイルのコンテンツの読み取り/書き込みに現在 XDocument (LInq2Xml インフラストラクチャ) を使用していることを忘れていました。

4

3 に答える 3

4

書面でドキュメントに追加するだけの場合は、これを試してください

http://msdn.microsoft.com/en-us/library/aa302289.aspx

基本的に、xml ドキュメントは開始タグと終了タグを持つシェルです。タグの間には、別のファイルを参照するインクルード参照があります。この別のファイルは、xml ドキュメントの本体です。書き込み操作の場合、書き込むたびに xml ファイルをロードする必要がなく、毎回ファイル全体を書き込む必要がないため、これは何倍も高速です。

XmlWriter クラスを使用すると、本体ファイルの末尾にノードを非常に簡単に追加できます。

他の人が xml を読みたい場合、ドキュメントを開くだけで、xml パーサーは両方のファイルを読み込んで解析することを「認識」します。

お役に立てれば。

于 2008-10-23T12:25:53.930 に答える
3

まず、XML ドキュメントへのすべてのアクセスが単一のインスタンスを介して行われるようにします。

次に、アクセスする関数の先頭にロック機構 (ロック解除を待機する) を配置し、最後にロックを解除します。

于 2008-10-23T11:59:15.670 に答える
1

データが重要だとはどういう意味ですか?XMLファイルはアプリケーションで排他的に使用されていませんか?

ファイルへのIOアクセスをロックする簡単な(そしておそらく十分な)方法は、各I/O操作でロックする必要がある「読み取り/書き込みトークン」オブジェクトを提供する静的ファクトリクラスを作成することです。

public static object GetReadWriteToken(String fileName)
{
    //use a hashtable to retreive an object, with filename as key
    return token;
}

読み取りと書き込み中にこれを行うだけです。

lock(GetReadWriteToken(@"C:\important.xml"))
{
    //io code
}
于 2008-10-23T12:00:42.343 に答える