【发布时间】:2014-07-05 02:44:43
【问题描述】:
场景 我正在使用带有 .NET framework 2.0* 的 C# Webforms(项目是 3.5,但 IIS 只有 2.0)。我有一个简单的表单,可以获取一些用户的信息和文件(PDF、gif 等)并将它们发送到另一个应用程序。很简单。问题是最终有很多人(超过 1000 人)试图同时访问它,并且 IIS 进程的内存使用量激增,导致应用程序崩溃。我们正在尝试改进基础设施(更多内存、网络农场等),但我想知道:
问题
我真的需要像下面的 finally 子句那样手动调用 FileUpload.FileContent.Close() 和 FileUpload.FileContent.Dispose() 吗?它可以帮助解决上述问题吗? ==> 回答:是的
如果我这样做,会不会弄乱 框架使用的临时文件? ==> 回答:否
我还能做些什么来避免这个问题?现在,我将尝试按照以下文章更改 Webconfig:http://support.microsoft.com/kb/821268/en-us AND http://www.codeproject.com/Articles/23306/ASP-NET-Performance-and-Scalability-Secrets
代码 这是我使用 FileUpload.SaveAs() 的代码片段。它基本上获取生成的和已经验证的信息(文件名、扩展名等)并使用它来保存文件上传的文件内容。
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;
}
【问题讨论】:
-
简短回答,是的。见this question
-
@Joe - tahnks。但是 FileUpload 的临时文件呢?这不会弄乱清理过程吗?
标签: c# file-upload memory-leaks garbage-collection asp.net-3.5