このアプリケーションでは、 Windows Serviceを使用してレポートを生成しています。レポートのデータは、ストアド プロシージャを使用してSQL Serverから取得されます。一部のシナリオでは、返される結果セットに 250,000 レコードが含まれます (この部分については支援できません。また、これについて計算を行う必要があるため、このデータが一度に必要になります)。
問題
アプリケーションはリーダーでこのデータを取得し、カスタム オブジェクトのカスタム コレクションでこのデータセットを変換しています。データが巨大であるため、完全なデータをカスタム オブジェクトに格納できず、メモリ不足になります。レコードの実行中にプロセスの使用状況をタスク マネージャーで確認すると、非常に高くなり、CPU 使用率も高くなります。
この場合、何をすべきかわかりません。
- CLR で実行されている単一のプロセスに割り当てられるメモリのサイズを増やすことはできますか?
- 他の回避策はありますか?
どんな助けでも本当に感謝します
- 一度にすべてのデータが必要な理由 : 完全な結果セットに対して計算を行う必要がある
- ADO.NET を使用して、データ セットをカスタム オブジェクト (コレクション) に変換しています。
- 私たちのシステムは32ビットです
- データをページングできません
- 計算を SQL サーバーに移動できません
このスタック トレースが役立つ場合があります。
タイプ 'System.OutOfMemoryException' の例外がスローされました。サーバー スタック トレース: System.Collections.Generic.Dictionary
2.ValueCollection.System.Collections.Generic.IEnumerable<TValue>.GetEnumerator() at System.Linq.Enumerable.WhereEnumerableIterator
1.MoveNext() で System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable
1 コレクション) で System.Collections.Generic.List1.AddRange(IEnumerable
1 コレクション) で MyProject.Common.Data.DataProperty.GetPropertiesForType( MyProject.Common.Data.Extensions.GetProperties[T](T target の C:\Ashish-Stuff\Projects\HCPA\Dev Branch\Common\Benefits.Common\Data\DataProperty.shared.cs:line 60 に t) と入力します。 ) in C:\Ashish-Stuff\Projects\HCPA\Dev Branch\Common\Benefits.Common\Data\Extensions.shared.cs:line 30 at MyProject.Common.Data.Factories.SqlServerDataFactoryContract1.GetData(String procedureName, IDictionary
2 つのパラメーター、Nullable1 languageId, Nullable
1 pageNumber、Nullable `1ページサイズ)
ありがとう、アシッシュ