我正在使用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();
}
有人可以建议如何克服这个内存问题。还有其他选择吗? 感谢您分享您的智慧和时间。
答案 0 :(得分:0)
除非... // other stuff
包含对此问题至关重要的内容,否则在页面上提取数据无助于WinForms端的内存消耗,因为您正在累积添加检索到的Report_ItemWiseSellEntity
的所有实例从服务到reportItems
列表。
由于您的UI永远无法同时显示“数百万条记录”,因此您的策略应该是在WinForms应用程序的内存中仅保留当前正在显示/处理的记录。您需要重新考虑将设计绑定到UI的设计,并通过用户界面的用户导航来协调检索数据的“页面”。