关注C#StreamReader的死锁问题

时间:2012-04-16 18:26:12

标签: c# asp.net-mvc deadlock

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

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

}

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

1 个答案:

答案 0 :(得分:8)

  

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

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