none
System.OutOfMemoryException em renderização RRS feed

  • Pergunta

  • Bom dia, 

    Estou usando o Rotativa para renderizar um relatório, está tudo ok, porém dependendo do número de linhas é lançada a exceção System.OutOfMemoryException, fiz um for com 2 milhões, debugando a view a execução passa sem problemas pelo for, no momento que encerra todas as instruções na view é que gera o problema, onde trabalho temos relatórios dessa grandeza, alguém sabe se existe alguma configuração para aumentar o limite de memória reservada para a renderização da página?

    Obrigado

    quinta-feira, 27 de fevereiro de 2014 13:14

Todas as Respostas

  • Bom dia.

    Tem como postar o código?

    Abs

    quinta-feira, 27 de fevereiro de 2014 13:58
  • Controller

            [HttpPost]
            public ActionResult GerarRelatorio(FormCollection f)
            {
                List<Procedimento> procedimentos = new List<Procedimento>();
                for (int i = 0; i < 1000000; i++)
                {
                    
                    procedimentos.Add(new Procedimento { 
                        DataProcedimento = new DateTime(2012,01,01),
                        MesAnoReferencia = "01/2012",
                        NomeProcedimento = "Procedimento teste",
                        Quantidade = i,
                        ValorProcedimento = Convert.ToDecimal(i)
                    });
                }

                Beneficiario b = new Beneficiario { 
                    CodigoBeneficiario = "45454",
                    Idade = "22",
                    Nome = "Beneficiário Teste",
                    Plano = "Standard",
                    TipoAssociado = "T"
                };

                Detalhe d = new Detalhe { beneficiario = b, Procedimentos = procedimentos };

                Relatorio r = new Relatorio { 
                    periodoInicial = new DateTime(2012,2,01),
                    periodoFinal = new DateTime(2012,04,01)
                };

                r.empresa = new Empresa { 
                    Codigo = 1, 
                    Nome = "empresa teste"
                };

                r.usuario = new Usuario { 
                    Codigo = 1,
                    Nome = "Usuário teste"
                };

                List<Detalhe> detalhes = new List<Detalhe>();
                detalhes.Add(d);

                r.detalhes = detalhes;         
               
                var pdf = new ViewAsPdf
                {
                    ViewName = "Teste",
                    //FileName = f["nomeEmpresa"] + ".pdf",
                    PageSize = Size.A4,
                    IsGrayScale = true,
                    Model = r,
                    PageMargins = new Margins{Bottom = 5, Left = 5, Right = 5, Top = 5},            
                };

                return pdf;
            }

    View 

    model Relatorios.Models.Relatorio
    @{
        ViewBag.Title = "Teste";
    }

    <h2>Teste</h2>

    @Model.empresa.Codigo
    @Model.empresa.Nome
    @Model.periodoFinal
    @Model.periodoInicial

    @foreach (var d in @Model.detalhes) { 
        
        <p>@d.beneficiario.Nome</p>
        
        foreach (var p in @d.Procedimentos) { 
            <p>
                @p.DataProcedimento |
                @p.MesAnoReferencia |
                @p.NomeProcedimento |
                @p.Quantidade |
                @p.ValorProcedimento
            </p>
        }
    }

    Lembrando que os códigos são apenas de teste



    quinta-feira, 27 de fevereiro de 2014 14:07