Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Report.Render()方法时发生OutOfMemoryException,尽管可用内存充足_C#_Asp.net_.net - Fatal编程技术网

C# 使用Report.Render()方法时发生OutOfMemoryException,尽管可用内存充足

C# 使用Report.Render()方法时发生OutOfMemoryException,尽管可用内存充足,c#,asp.net,.net,C#,Asp.net,.net,调用Report.Render()方法()时,我们公司的一个客户机遇到定期OutOfMemoryException。尽管所有迹象表明操作系统在发生故障时有大量可用内存,但仍会发生这种情况。在这种情况下,报告被提供一个具有嵌入映像的RDLC文件。RDLC文件的大小为321KB 我们向相关进程添加了一些内存诊断: 在Render()方法调用之前,工作进程显示内存占用量约为412MB,尽管这个数量自然会有所不同。它从未见过超过600MB的容量。(这是使用GC.GetTotalMemory(false

调用Report.Render()方法()时,我们公司的一个客户机遇到定期OutOfMemoryException。尽管所有迹象表明操作系统在发生故障时有大量可用内存,但仍会发生这种情况。在这种情况下,报告被提供一个具有嵌入映像的RDLC文件。RDLC文件的大小为321KB

我们向相关进程添加了一些内存诊断:

  • 在Render()方法调用之前,工作进程显示内存占用量约为412MB,尽管这个数量自然会有所不同。它从未见过超过600MB的容量。(这是使用GC.GetTotalMemory(false)确定的)
  • 在Render()方法调用之前,操作系统会报告系统上的以下内存可用性(使用GlobalMemoryStatusEx函数()确定):
这里是堆栈跟踪的一部分;请注意,确切的故障点有时会有所不同,报告的确切异常情况也是如此。但到目前为止,最常见的异常是OutOfMemoryException:

Microsoft.Reporting.WebForms.LocalProcessingException: An error occurred during local report processing. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: An unexpected error occurred in Report Processing. ---> System.OutOfMemoryException: Out of memory.
   at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.SharedRenderer.GetImage(RPLReport rplReport, Byte[]& imageData, Int64 imageDataOffset, GDIImageProps& gdiImageProps)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.PDFWriter.GetImage(String imageName, Byte[] imageData, Int64 imageDataOffset, GDIImageProps gdiImageProps)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.PDFWriter.DrawImage(RectangleF position, RPLImage image, RPLImageProps instanceProperties, RPLImagePropsDef definitionProperties)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.Renderer.ProcessImage(RPLMeasurement measurement, RectangleF position)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.Renderer.ProcessReportItem(RPLMeasurement measurement, RectangleF bounds, Boolean renderBorders, Boolean hasTablixCellParent)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.Renderer.ProcessNonTablixContainerReportItems(RPLContainer container, RectangleF bounds)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.Renderer.ProcessReportItem(RPLMeasurement measurement, RectangleF bounds, Boolean renderBorders, Boolean hasTablixCellParent)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.Renderer.ProcessPage(RPLReport rplReport, Int32 pageNumber, FontCache sharedFontCache, List`1 paragraphsItemizedData)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.PDFRenderer.Render(Report report, NameValueCollection deviceInfo, Hashtable renderProperties, CreateAndRegisterStream createAndRegisterStream)
   at Microsoft.ReportingServices.Rendering.ImageRenderer.RendererBase.Render(Report report, NameValueCollection reportServerParameters, NameValueCollection deviceInfo, NameValueCollection clientCapabilities, Hashtable& renderProperties, CreateAndRegisterStream createAndRegisterStream)
   at Microsoft.ReportingServices.ReportProcessing.ReportProcessing.RenderReport(IRenderingExtension newRenderer, DateTime executionTimeStamp, ProcessingContext pc, RenderingContext rc, IChunkFactory cacheDataChunkFactory, IChunkFactory yukonCompiledDefinition, Boolean& dataCached)
运行此web应用的此应用程序池配置了私有内存限制、请求限制和虚拟内存限制值,所有这些值均设置为0(无限制)

在我们的代码中,在Render()方法调用之后,我们还调用以下命令以尝试释放报表生成占用的内存:

report.DataSources.Clear();
report.ReleaseSandboxAppDomain();
report.Dispose();

我欢迎对这个问题有任何想法或建议。

你能帮我做一个简单的回答吗!转储堆。当您的报表太大时,可能会发生这种情况。玩内存管理几乎毫无用处。你的数据源是什么?可能你有太多的数据,你需要优化它。。。我目前在ActiveReport中也遇到了同样的问题,过滤器返回的数据太多,无法处理……这是32位还是64位的过程?@terrencep:这将是我下一步研究的途径之一,是的。贝斯特:我们只是从内存占用的角度来看数据,但实际上还没有深入研究数据本身。我来看看,你能帮我个忙吗!转储堆。当您的报表太大时,可能会发生这种情况。玩内存管理几乎毫无用处。你的数据源是什么?可能你有太多的数据,你需要优化它。。。我目前在ActiveReport中也遇到了同样的问题,过滤器返回的数据太多,无法处理……这是32位还是64位的过程?@terrencep:这将是我下一步研究的途径之一,是的。贝斯特:我们只是从内存占用的角度来看数据,但实际上还没有深入研究数据本身。我来看看。
report.DataSources.Clear();
report.ReleaseSandboxAppDomain();
report.Dispose();