0

Winforms アプリケーション内でサーバーからデータを取得するために WCF データ サービスを使用しています。何百万ものレコードを持つかさばるレポートを表示しようとしています。私はデータページを賢明にフェッチしてコレクションに保存していますが、メモリが不足しています。

以下は、合計レコードを検索し、List にメモリを割り当てるために使用されるコードです。

int totalRecords = ReportingService.Instance.CountRecords_ReportItemWiseSell(d1, d2);
List<Report_ItemWiseSellEntity> reportItems = new List<Report_ItemWiseSellEntity>(totalRecords);

すべてのページングされたデータを収集するコードは次のとおりです

int totalPageCount = (totalRecords / pageSize) + 1;
lvReport.Items.Clear();
for (int i = 1; i <= totalPageCount; i++){
   var tmpItems = new List<Report_ItemWiseSellEntity>();
   tmpItems = ReportingService.Instance.GetItemWiseSellReport(d1, d2, i, pageSize);
   reportItems.AddRange(tmpItems);

   ... //other stuff
   tmpItems = null;
   Application.DoEvents();
}

このメモリの問題を克服する方法を誰かが提案できますか? 他の代替手段はありますか?あなたの知恵と時間を共有してくれてありがとう。

4

1 に答える 1

0

問題に重要なものが含まれていない限り 、サービスから取得したすべてのインスタンスをリスト... // other stuffに累積的に追加しているため、ページごとのデータのフェッチは WinForms 側のメモリ消費に役立ちません。Report_ItemWiseSellEntityreportItems

UI が「数百万のレコード」を同時に表示することは決してないため、現在表示/処理されているレコードのみを WinForms アプリケーションのメモリに保持する戦略が必要です。データを UI にバインドするための設計を再考し、データの "ページ" の取得と、UI を介したユーザーのレポートのナビゲーションを調整する必要があります。

于 2012-09-05T12:41:22.887 に答える