5

一般的な質問ですが、次のように自動破棄のUsingステートメント内のStreamReaderを使用して構成ファイルから読み取るASP.NETMVC3Webアプリケーションを開発しています。

using (StreamReader sr = new StreamReader(filepath))
{

}

私の懸念は、複数のユーザーがアプリケーションを実行しているときに、アプリケーションの複数のインスタンスが構成ファイルから値を読み取っているときにデッドロックが発生することです。私の質問は、StreamReaderクラスを操作するときにデッドロックが問題になるかどうかです。直感的には、Stream Readerがファイルを読み取り専用モードで開いており、手動編集以外に構成ファイルに書き込む外部プロセスがないと想定しているため、そうではないと思います。これが問題になるかどうかを確認したかっただけです。任意の洞察をいただければ幸いです。

4

1 に答える 1

8

私の懸念は、複数のユーザーがアプリケーションを実行しているときに、アプリケーションの複数のインスタンスが構成ファイルから値を読み取っているときにデッドロックが発生することです。

いいえ、心配しないでください。デッドロックは発生しません。読み取り用にファイルを開いています。したがって、同時リーダーを持つことができます。ただし、コードの他の場所でこのファイルに書き込むと、例外が発生します。しかし、デッドロックはありません。リーダーとライターをファイルなどの共有リソースに適切に同期する場合は、 ReaderWriterLockSlimを使用できます。クラス。(同じプロセスまたは他のプロセスから)ファイルに書き込むことがない場合は、問題ありません。ただし、ファイルに書き込むことがない場合は、このファイルを毎回読み取ったり解析したりしないように、一度だけ読み取ってメモリ構造にキャッシュする必要があります。たとえば、これが.NETアプリケーション構成システムの仕組みです。アプリケーションの実行時にapp/web.configを一度読み取り、解析してから、より高速にアクセスできるようにメモリに保存します。しかしもちろん、すべてはあなたの正確なシナリオに依存します。

于 2012-04-16T18:28:15.967 に答える