СЦЕНАРИЙ. Я использую веб-формы C # с .NET framework 2.0 * (проект - 3.5, а в IIS - только 2.0). У меня есть простая форма, которая получает информацию и файлы некоторых пользователей (PDF, gif и т. Д.) И отправляет их в другое приложение. Довольно просто. Проблема в том, что в конечном итоге ОЧЕНЬ много людей (более 1000) пытаются получить к нему доступ одновременно, и использование памяти процессом IIS резко возрастает, что приводит к сбою приложения. Мы пытаемся улучшить инфраструктуру (больше памяти, веб-фермы и т. Д.), Но я хотел бы знать:
ВОПРОСЫ
Мне действительно НУЖНО вручную вызывать FileUpload.FileContent.Close () и FileUpload.FileContent.Dispose (), как в предложении finally ниже? Может ли это помочь в решении вышеупомянутой проблемы? ==> ОТВЕТИЛ: ДА
Если я так сделаю, может ли это испортить процесс очистки временных файлов, используемых фреймворком? ==> ОТВЕТИЛ: НЕТ
Что еще я могу сделать, чтобы избежать этой проблемы? А пока я попробую изменить Webconfig, следуя этим статьям: http://support.microsoft.com/kb/821268/en-us И http://www.codeproject.com/Articles/23306/ASP-NET-Performance-and-Scalability-Secrets
CODE Вот фрагмент кода, в котором я использую FileUpload.SaveAs (). Он в основном получает сгенерированную и уже подтвержденную информацию (имя файла, расширение и т. Д.) И использует ее для сохранения fileContent загрузки файла.
private bool GravarArquivo(FileUpload fileUpload, eXML.Anexo anexo)
{
bool sucesso = false;
if (AnexoValido(fileUpload, anexo))
{
string path = Server.MapPath(bllProcesso.GetUrlArquivo(anexo.NomeArquivoFisico));
try
{
//GRAVA ARQUIVO
fileUpload.SaveAs(path);
sucesso = true;
}
catch (Exception ex)
{
string mensagem = String.Format("Erro ao tentar salvar o arquivo '{0}'. Exception: '{1}'", anexo.NomeArquivoFisico, ex.Message);
MostrarAlerta(this, mensagem);
//throw new Exception(mensagem, ex);
}
//TODO: ESTUDAR O USO DESTE FINALLY, PARA VER SE DIMINUI O PROBLEMA DE MEMÓRIA DO SERVIDOR
//finally
//{
// fileUpload.FileContent.Close();
// fileUpload.FileContent.Dispose();
//}
}
return sucesso;
}