C# 内存不足

C# 内存不足,c#,winforms,wcf-data-services,C#,Winforms,Wcf Data Services,我正在使用WCF数据服务从winforms应用程序中的服务器获取数据。 我试图展示一份庞大的报告,它有数百万条记录。 虽然我正在逐页获取数据并存储到集合中,但内存不足 下面是用于查找总记录和为列表分配内存的代码 int totalRecords = ReportingService.Instance.CountRecords_ReportItemWiseSell(d1, d2); List<Report_ItemWiseSellEntity> reportItems = new Li

我正在使用WCF数据服务从winforms应用程序中的服务器获取数据。 我试图展示一份庞大的报告,它有数百万条记录。 虽然我正在逐页获取数据并存储到集合中,但内存不足

下面是用于查找总记录和为列表分配内存的代码

int totalRecords = ReportingService.Instance.CountRecords_ReportItemWiseSell(d1, d2);
List<Report_ItemWiseSellEntity> reportItems = new List<Report_ItemWiseSellEntity>(totalRecords);
int totalRecords=ReportingService.Instance.CountRecords\u ReportItemWiseSell(d1,d2);
List reportItems=新列表(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();
}
inttotalpagecount=(totalRecords/pageSize)+1;
lvReport.Items.Clear();

对于(int i=1;i除非
..//other stuff
包含对该问题至关重要的内容,否则从WinForms端获取数据页对内存消耗没有帮助,因为您将从服务中检索到的
Report\u ItemWiseSellEntity
的所有实例累积添加到
reportItems
列表中


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

WinForms应用程序或WCF哪一个内存不足?还有,
报表中包含什么样的数据结构\u ItemWiseSellEntity
?在哪一行获得OutOfMemoryException?似乎for在每个页面中循环并加载项。如果是case、 为什么会这样?分页的想法应该是只加载当前显示在内存中的页面。你的用户做了什么,才应该受到必须阅读数百万行的惩罚?他/她不是在寻找特别的东西吗?让他/她在填充百万行之前输入这些筛选条件不是更有意义吗列表中的行数?这是一个向用户显示报告的代码。该报告是在给定的日期范围内获取的。在3个月的时间内,大约有90000条记录,根据日期范围增加或减少。我只是将这些计算出的行分为几页进行获取。然后,这些记录显示在GridView中,并导出到Excel或其他文件以供查看垫子。其他东西确实没有阻挡任何东西。当我执行报告时,大约有8页从13页中取出并加载,为期三个月。对于较低的日期范围,如15天,报告正确加载。