C# 进程无法访问文件“C:\inetpub\wwwroot\MyApp\5-23-2011.log”,因为其他进程正在使用该文件

C# 进程无法访问文件“C:\inetpub\wwwroot\MyApp\5-23-2011.log”,因为其他进程正在使用该文件,c#,asp.net,multithreading,filestream,C#,Asp.net,Multithreading,Filestream,我有一个在ASP.NET应用程序中使用的单例记录器。有时我发现进程无法访问此行上的文件错误: StreamWriter sw = new StreamWriter("Path to log file", true); 我检查了文件句柄,w3wp.exe拥有该句柄,因此同一进程中的不同线程似乎导致了该问题 我在上面的代码中使用了一个锁,但仍然得到了错误。 如何确保所有线程都能安全地使用同一个流?不要多次打开日志文件;只要在应用程序启动时打开它,在退出时关闭它,并经常刷新它。多次打开和关闭都是低效

我有一个在ASP.NET应用程序中使用的单例记录器。有时我发现进程无法访问此行上的文件错误:

StreamWriter sw = new StreamWriter("Path to log file", true);
我检查了文件句柄,w3wp.exe拥有该句柄,因此同一进程中的不同线程似乎导致了该问题

我在上面的代码中使用了一个锁,但仍然得到了错误。
如何确保所有线程都能安全地使用同一个流?

不要多次打开日志文件;只要在应用程序启动时打开它,在退出时关闭它,并经常刷新它。多次打开和关闭都是低效的。

您锁定的是什么?请添加包含lock语句的行。为什么不直接使用现有的日志库,省去这些麻烦呢?有log4net、elmah、MS enterprise logging应用程序块……我创建了一个新问题,并在下面添加了完整的源代码:@nickyt:我尝试了很多,只是引用了一个类似EntLib的记录器,在代码中添加了8MB的程序集。我需要一个灯光记录器。您可以在这里查看:您是否在服务器上启用了web gardens?