4

90,000 行を返す proc を指す rdl ドキュメントを作成しましたが、メモリ不足の例外が発生しています。レポート プロジェクトで処理できる行数に制限はありますか?

現在、レポートを駆動する proc を変更して、上位 90 000 を選択するだけにしました。私の仕様では、120 000 行のレポートを作成できるようになっています。私のレポートはマトリックスです。

先週、106800 行を含むレポートを生成したことを誓いますが、突然できなくなりました。

レンダリング拡張機能を作成しましたが、これはコードにステップインしたときの例外の一部です。

eInfo: 2009 年 2 月 12 日 12:03:53 PM prairieFyre.ReportActions.RenderReport: レポートのレンダリング エラー Microsoft.Reporting.WinForms.LocalProcessingException: ローカル レポートの処理中にエラーが発生しました。---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: レポート処理で予期しないエラーが発生しました。---> System.OutOfMemoryException: タイプ 'System.OutOfMemoryException' の例外がスローされました。System.IO.MemoryStream.set_Capacity(Int32 値) で System.IO.MemoryStream.EnsureCapacity(Int32 値) で System.IO.MemoryStream.Write(Byte[] バッファー、Int32 オフセット、Int32 カウント) で System.IO.BinaryWriter .Write(String value) at Microsoft.ReportingServices.ReportProcessing.Persistence.IntermediateFormatWriter.ReportServerBinaryWriter.WriteString(String stringValue) ....

4

3 に答える 3

4

ハードウェア構成以外に制限はないと思います。32 ビット マシンで、これを処理しているワーカー プロセスのメモリが 2 ギガバイト未満である場合、カーネル モード メモリを考慮に入れると、おそらく 1 ギガバイトに近くなります。このような大規模なレポートを提供する場合は、おそらく、ボックスに少なくとも 4 ギガ以上のメモリを備えた 64 ビットのセットアップが必要です。この設定により、ワーカー プロセスは 2 ギガを超える使用可能なメモリを割り当てて、これらの大きな要求を問題なく完了することができます。

ハードウェアのアップグレードがオプションでない場合は、これらの代替手段も検討できます。

  • レポートはマトリックス レポートだとおっしゃっていたので、すべてのデータをユーザーに表示するのではなく、集計しているように聞こえます。このデータの一部をデータベースに事前に集約してから、表示に SSRS を使用できますか?

  • レポートは XML ファイルにすぎないため、SQL サーバー内から、または何らかのスクリプトまたはプロセスを使用してレポート XML 文字列を作成します。これは大変な作業になる場合があります。

于 2009-02-12T17:45:16.453 に答える
3

スタックは、レポートの実行結果を格納するために使用される MemoryStream がそのサイズを増加 (2 倍) できないことを示しています。

これは通常、ハードウェアを追加しても解決できないアドレス空間の断片化が原因です。

Microsoft ReportViewer は、中間レポート実行結果を MemoryStream に保存するように設計されているため、処理できるデータ量が制限されています。これは、残念ながら、通常の .NET アプリケーション (2GB のアドレス空間) は 256MB 以下で、多くの場合それよりもはるかに小さいです。

たとえば、このストリームでは、すべてのフィールド値、集計値、式、および画像が保存されるため、サイズはレポートに追加されるデータ セットのサイズに直接依存します。

.NET アプリケーションのアドレス空間とオブジェクトを分析するには、WinDBG (Windows 用デバッグ ツール) と SOS 拡張機能を使用してデバッグすることをお勧めします。

アドレス フラグメンテーションを分析するための有用なコマンドは次のとおりです。

  • !アドレス -概要
  • lm
  • !EEHeap -gc
  • !DumpHeap -stat

この特定のケースでは、マトリックスではなくデータ ソースに既にある値を事前に集計することで、データの量を減らすことができる場合があります。

詳細なヒントは、ナレッジ ベースの記事「SQL Server Reporting Services を使用すると、'System.OutOfMemoryException' エラー メッセージが表示される場合があります」[1] に記載されています。

[1]: http://support.microsoft.com/kb/909678 SQL Server Reporting Services 使用時の "System.OutOfMemoryException" エラー メッセージ

于 2010-08-02T11:52:46.197 に答える
0

interactiveHeight プロパティが 0 に設定されていないことを確認してください 。 =0

于 2012-07-27T22:51:05.343 に答える