2011-08-01 24 views
2

我需要處理來自我的控制之外的數據庫(SQL,Oracle,Access,MySQL,Sharepoint等)的非常大的數據表(200萬行+):目前我循環遍歷每行和每列建立一個字符串對象,但我運行在約100k行out of memory通過代碼隱藏的數據表進行分頁

我可能採取的唯一解決方案是將數據表分成較小的部分,並在開始下一行數據塊之前持續存儲每個數據塊。

由於我不能添加ROW_NUMBER()或類似的東西,我必須處理填充的數據表。

我該如何輕鬆地(記住性能)將填充的數據表分成更小的數據表(如分頁)?

PS此功能沒有可視組件。

回答

1

你使用字符串連接嗎?像這樣string += string

將其更改爲StringBuilder並且您不應該遇到問題,至少不能用於20k行。

+1

我已經標記了你的正確答案,但事實上它並不是完整的答案。我最終將輸入的數據分爲500個批次。 – callisto

+0

Tnx。這只是我的膝蓋反應,當有人提到字符串和性能:)我只是好奇,你沒有精心設計爲什麼你會想要一個100k行的字符串表示。另外,如果你能顯示一些代碼,我們可能可以進一步幫助.. – SWeko

+0

參考這個問:http://stackoverflow.com/questions/5388682/creating-an-etl-system-data-import-and- (現在完成)項目的概述。 MySQL只是一個新增的數據源 – callisto

0

如果您正在討論填充DataTable對象(它會在處理之前將調用的結果加載到內存中),那麼對每個提及的提供者使用datareader可能會更好,因此您可以將每行處理爲它是從數據庫中,而不是存儲在內存中的數據表中讀取...

一個great answer to another question列表如果您已經使用datareaders-的DataReader /數據表

的PRO /缺點忽略這一點。但是你的記憶問題可能來自於存儲檢索結果...