Почему вызовы File.Delete () и File.Move () в ASP.NET вызывают зависание моего рабочего процесса? - PullRequest
0 голосов
/ 06 октября 2010

Когда я выполняю следующий код для удаления и перемещения файла, мой рабочий процесс зависает:

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

В папке FullSourceFilePath содержится более 15000 файлов.

Над кодомприводит к зависанию сайта (только для этого сайта) , если размер файла, который необходимо переместить, превышает 5 МБ.Когда возникает эта проблема, мой рабочий процесс начинает потреблять память, и постепенно мой сервер останавливается на коленях.

Единственное решение для восстановления состоит в том, чтобы выполнить команду IISRESET /RESTART.

Моя среда:

IIS6, работающий в Windows 2003 x86 SP2
Веб-сайт, написанный на ASP.NET 4.0 и C #

1 Ответ

0 голосов
/ 06 октября 2010

По-видимому, проблема здесь, вероятно, заключается в большом количестве файлов в папке, в которую вы перемещаете файл.

Рабочий процесс зависает только на File.Move()?

Попробуйте сделать:

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

Попробуйте попробовать выполнить те же действия из командной строки и посмотреть, не вызывает ли это ту же проблему.

Если это так, то вы 'Файловая система может быть сильно фрагментирована, а диск работает.

Windows также не очень хорошо обрабатывает большое количество файлов, если файлы можно классифицировать любым способом (например, по диапазону идентификаторов или диапазону дат).затем разбейте его на подпапки.

Вы также можете запустить DebugDiag и захватить мини-дамп, чтобы увидеть, где происходит узкое место.

Блог Тесс Феррандез *В 1020 * есть несколько замечательных статей о том, как использовать этот инструмент для определения причин интенсивного использования памяти, сбоев и зависаний рабочего процесса.

.NET Отладка Демонстрация - информация и инструкция по настройкенс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...