失去记忆

时间:2012-09-05 11:53:28

标签: c# winforms wcf-data-services

我正在使用WCF数据服务从winforms应用程序中的服务器获取数据。 我试图显示拥有数百万条记录的庞大报告。 虽然我在页面上提取数据并存储到集合中但是内存不足。

以下是用于查找总记录并为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();
}

有人可以建议如何克服这个内存问题。还有其他选择吗? 感谢您分享您的智慧和时间。

1 个答案:

答案 0 :(得分:0)

除非... // other stuff包含对此问题至关重要的内容,否则在页面上提取数据无助于WinForms端的内存消耗,因为您正在累积添加检索到的Report_ItemWiseSellEntity的所有实例从服务到reportItems列表。

由于您的UI永远无法同时显示“数百万条记录”,因此您的策略应该是在WinForms应用程序的内存中仅保留当前正在显示/处理的记录。您需要重新考虑将设计绑定到UI的设计,并通过用户界面的用户导航来协调检索数据的“页面”。