2012-09-05 81 views
0

我正在使用WCF數據服務從我的Winforms應用程序中的服務器獲取數據。 我正試圖顯示龐大的報告有數百萬條記錄。 雖然我提取明智的數據頁面和存儲到集合,但內存不足。內存不足

以下是用於查找總記錄和爲列表分配內存的代碼。

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(); 
} 

任何人都可以提出如何克服這種內存問題的代碼。還有其他的選擇嗎? 感謝您分享您的智慧和時間。

+2

哪一個內存不足,WinForms應用程序或WCF? –

+0

另外,「Report_ItemWiseSellEntity」中包含哪些數據結構? –

+2

你會在哪一行得到OutOfMemoryException? 看來你的循環循環遍歷每一頁和加載項目。如果是這樣的話,爲什麼呢?分頁的想法應該是隻將當前顯示的頁面加載到內存中。 – mortb

回答

0

除非... // other stuff包含一些至關重要的問題,您的數據抓取頁面,明智的不與上側的WinForms內存消耗幫助,因爲你是累加從服務檢索的Report_ItemWiseSellEntity所有實例到reportItems列表。由於您的用戶界面永遠無法同時顯示「數百萬條記錄」,因此您的策略應該是隻在WinForms應用程序的內存中保留當前正在顯示/處理的記錄。您將需要重新考慮將數據綁定到UI的設計,並協調通過用戶界面通過用戶導航報告來檢索數據的「頁面」。

+0

其他東西確實沒有阻塞任何東西。當我執行報告時,大約有8個頁面被提取並從13個頁面中載入,爲期三個月。對於15天之後的較低日期範圍,報告已正確加載。 – IrfanRaza