Стек указывает, что MemoryStream, используемый для хранения результата выполнения отчета, не может увеличить (удвоить) его размер.
Обычно это вызвано фрагментацией адресного пространства, которая обычно не может быть решена путем добавления аппаратного обеспечения.
Microsoft ReportViewer ограничен в объеме данных, которые он может обрабатывать, поскольку он предназначен для хранения промежуточного результата выполнения отчета в MemoryStream, который, к сожалению, требует квадратично растущего объема непрерывного свободного адресного пространства, что в обычном приложении .NET ( 2 ГБ адресного пространства) не больше 256 МБ, а зачастую и намного меньше.
Например, в этом потоке хранятся все значения полей, агрегированные значения, выражения и изображения, поэтому размер напрямую зависит от размера наборов данных, добавленных в отчет.
Для анализа адресного пространства и объектов приложения .NET лучше всего выполнить отладку с помощью WinDBG (средства отладки для Windows) и расширений SOS.
Ценные команды для анализа фрагментации адреса:
- ! Address -summary
- лм
- ! EEHeap -gc
- ! DumpHeap -stat
В этом конкретном случае может оказаться возможным уменьшить объем данных путем предварительной агрегации значений, уже находящихся в источнике данных, а не в матрице.
Дополнительные советы приведены в статье базы знаний «При использовании служб отчетов SQL Server может появиться сообщение об ошибке« System.OutOfMemoryException »[1].
[1]: http://support.microsoft.com/kb/909678 Сообщение об ошибке «System.OutOfMemoryException» при использовании служб отчетов SQL Server