SCENARIO 我使用带有.NET framework 2.0 *的C#Webforms(项目是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()的代码片段。它基本上获取生成的和已经验证的信息(文件名,扩展名等),并使用它来保存fileupload的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;
}
答案 0 :(得分:0)
使用资源完成后,应始终调用Dispose。这释放了其他应用程序使用的内部资源。
调用Dispose不会释放内存。
如果您不调用Dispose,将来会在某个不确定的时间自动调用它。