2010-10-06 15 views
0

當我執行下面的代碼刪除和移動文件我的工作進程掛起:爲什麼在ASP.NET中調用File.Delete()和File.Move()會導致我的工作進程掛起?

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上運行

IIS6 2003 SP2 x86的
網站使用ASP.NET 4.0和C#

回答

0

在猜測,這裏的問題可能是寫大您將文件移動到的文件夾中的文件數。

工作進程是否掛在File.Move()上?

嘗試做:

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

其他的事情,試圖從命令行執行相同的動作,看看是否會導致出現同樣的問題。

如果確實如此,那麼您的文件系統可能會嚴重碎片化並且磁盤出現抖動。

如果可以按任何方式對文件進行分類(例如通過ID範圍或日期範圍),則Windows也不能很好地處理大量文件,然後將其分解爲子文件夾。

您也可以運行DebugDiag並捕獲小轉儲以查看瓶頸發生的位置。

Tess Ferrandez' blog有一些關於如何使用此工具來確定工作進程高內存使用,崩潰和掛起的原因。

.NET Debugging Demos - Information and setup instructions

+0

感謝,只需添加一些更多的信息。相同的操作與傳統的asp – nLL 2010-10-06 15:12:10

+0

@nLL一起工作得很好 - 可能需要挖掘調試工具來了解發生了什麼。 – Kev 2010-10-06 15:15:12

相關問題