为什么在ASP.NET中调用File.Delete()和File.Move()导致我的工作进程挂起?

时间:2010-10-06 09:35:30

标签: c# asp.net iis-6

当我执行以下代码来删除和移动文件时,我的工作进程挂起:

File.Delete(FullSourceFilePath);
File.Move(FullTempFilePath, FullSourceFilePath);
// update db
Data.AdminUpdateFileSizeandBitrate(FileId, SizeInbytes, Bitrate);
Response.Redirect("?m=File replaced!");

文件夹FullSourceFilePath中包含超过15000个文件。

以上代码导致网站挂起(仅限此网站)如果需要移动的文件大于5 MB左右。出现这个问题时,我的工作进程开始消耗内存,逐渐使我的服务器陷入困境。

然后,唯一的恢复解决方案是发出IISRESET /RESTART命令。

我的环境是:

  

在Windows 2003 x86 SP2上运行的IIS6   使用ASP.NET 4.0和C#编写的Web站点

1 个答案:

答案 0 :(得分:0)

猜测,这里的问题可能是您要将文件移动到的文件夹中的大量文件。

工作进程是否只挂在File.Move()上?

尝试做:

File.Delete(FullSourceFilePath);
File.Copy(FullTempFilePath, FullSourceFilePath);

要尝试的其他事项是从命令行执行相同的操作,看看是否会导致出现同样的问题。

如果确实如此,那么你的文件系统可能会严重碎片化而且磁盘正在颠簸。

Windows也不能很好地处理大量文件,如果可以以任何方式对文件进行分类(例如通过ID范围或日期范围),则将其分解为子文件夹。

您还可以运行DebugDiag并捕获一个小型转储,以查看瓶颈发生的位置。

Tess Ferrandez' blog有一些很棒的文章介绍了如何使用这个工具来确定工作进程高内存使用,崩溃和挂起的原因。

  

.NET Debugging Demos - Information and setup instructions