C#3.5服务器内存不足(OOM)
本文关键字:OOM 内存不足 服务器 C#3 | 更新日期: 2023-09-27 18:03:46
场景我正在与一起使用C#Webforms。NET framework 2.0*(项目是3.5,但IIS只有2.0(。我有一个简单的表单,可以获取一些用户的信息和文件(PDF、gif等(,并将它们发送到另一个应用程序。很简单。问题是,最终有很多人(超过1000人(试图同时访问它,IIS进程的内存使用量激增,导致应用程序崩溃。我们正在努力改进基础设施(更多内存、网络农场等(,但我想知道:
问题
-
我真的需要手动调用FileUpload吗。文件内容。Close((和FileUpload。文件内容。Dispose((类似于下面的finally子句吗?它能帮助解决上述问题吗===>回答:是
-
如果我这样做,会不会把框架使用的临时文件===>回答:否
-
我还能做些什么来避免这个问题?现在,我将在以下文章中尝试更改Webconfig:http://support.microsoft.com/kb/821268/en-us以及http://www.codeproject.com/Articles/23306/ASP-NET-Performance-and-Scalability-Secrets
代码这是我使用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;
}
使用完资源后,应始终调用Dispose。这释放了它的内部资源供其他应用程序使用。
调用Dispose不会释放内存。
如果不调用Dispose,它将在将来某个不确定的时间自动调用。