5

只是一个一般性问题,我正在开发一个 ASP.NET MVC 3 Web 应用程序,该应用程序在 Using 语句中使用 Stream Reader 从配置文件中读取以进行自动处理,如下所示:

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

}

我担心的是,当多个用户运行应用程序时,当应用程序的多个实例从配置文件中读取值时会发生死锁。我的问题是,在使用 Stream Reader 类时,死锁是一个问题吗?直觉上我认为不会,因为我假设 Stream Reader 正在以只读模式打开文件,并且除了手动编辑之外没有外部进程写入配置文件。我只是想确定这是否会成为问题。任何见解都值得赞赏。

4

1 回答 1

8

我担心的是,当多个用户运行应用程序时,当应用程序的多个实例从配置文件中读取值时会发生死锁

不,别担心。不会发生死锁。您正在打开文件进行阅读。所以你可以有并发读者。但是,如果您在代码的其他位置写入此文件,则会出现异常。但没有僵局。如果您想正确地将读取器和写入器同步到某些共享资源(例如文件),您可以使用ReaderWriterLockSlim班级。如果您从不写入文件(来自同一进程或其他进程),那么您就可以了。但是如果你从不写文件,为了避免每次都读取和解析这个文件,你应该只读取一次并缓存在一些内存结构中。例如,这就是 .NET 应用程序配置系统的工作方式。它在运行应用程序时读取并解析 app/web.config 一次,然后将其存储到内存中以便更快地访问。但当然,一切都取决于您的具体情况。

于 2012-04-16T18:28:15.967 回答