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进程的内存使用量激增,导致应用程序崩溃。我们正在努力改进基础设施(更多内存、网络农场等(,但我想知道:

问题

  1. 我真的需要手动调用FileUpload吗。文件内容。Close((和FileUpload。文件内容。Dispose((类似于下面的finally子句吗?它能帮助解决上述问题吗===>回答:是

  2. 如果我这样做,会不会把框架使用的临时文件===>回答:否

  3. 我还能做些什么来避免这个问题?现在,我将在以下文章中尝试更改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;
    }

C#3.5服务器内存不足(OOM)

使用完资源后,应始终调用Dispose。这释放了它的内部资源供其他应用程序使用。

调用Dispose不会释放内存。

如果不调用Dispose,它将在将来某个不确定的时间自动调用。