2015-12-20 26 views
0

我試圖從sql server下載表並將每個下載的表寫入一個csv文件,然後gzip它。檢索結果並以.csv格式緩存加載並gzip文件

我現在的問題是,表是如此之大(上面100萬行,我用python熊貓數據框來做到這一點),它會給內存錯誤。

有沒有辦法在C#中這樣懶惰地做到這一點,以便內存使用率最小化,然後我可以爲這個任務並行運行2-3個進程?

回答

0

是的,是的。

  1. 您必須在循環中檢索數據,以確保您沒有在內存中保存所有百萬條記錄。使用StreamWriter將文件寫入文件而不是將它們保存在內存中:OutOfMemory exception thrown while writing large text file

  2. 創建您的軟件,以便寫入方法將表名稱作爲參數。然後,如果需要,可以並行運行所有表。爲數據庫表使用單獨的文件以確保更快的性能。如果要將數據庫寫入作爲單獨的可處理線程執行,請使用線程啓動:https://msdn.microsoft.com/en-us/library/6x4c42hc(v=vs.110).aspx

    或者編寫異步並使用await關鍵字調用它。 https://msdn.microsoft.com/en-us/library/hh193364(v=vs.110).aspx