2012-08-16 97 views
1

我有一個程序產生大量的數據,它將逐行寫入一個csv文件(隨着數據的創建)。如果我能夠在Excel中打開csv文件,它將大約有10億個單元格(75,000 * 14,600)。我每次嘗試訪問它時都會引發System.OutOfMemoryException異常(或者甚至創建一個這樣大小的數組)。如果任何人有任何想法如何可以將數據帶入vb.net,所以我可以做一些簡單的操作(所有的數據需要立即可用),那麼我會嘗試你有每個想法。如何在vb.net中處理一個非常大的數組

我已經看過增加使用的RAM的數量,但其他文章/文章說這將在10億分之前短暫運行。在這裏沒有任何問題,假設它不超過幾天/每週我可以處理它(我只會每年運行一次或兩次)。如果你不知道這麼做,我能想到的唯一的其他解決方案就是將excel中的列數增加到75,000(如果可能的話 - 不能用其他方式寫數據),或者我猜想如果有另一種語言可以處理這個問題?

目前它在一開始失敗:

Dim bigmatrix(75000, 14600) As Double 

非常感謝, 弗雷澤:)

+0

爲什麼你說所有的數據必須一次可用?這裏最好的辦法就是盡你所能地對這個陳述進行質疑。 :-) – 2012-08-16 05:34:51

+0

Jason,發生什麼事是我將數據逐行寫入文件。然後我需要數據轉置(即列到行等)。沒有全部日期,我看不到任何合理的方式。如果你能那樣做會很棒! :) – FraserOfSmeg 2012-08-16 17:23:27

+0

如果你只是想轉換一個巨大的CSV,我會做的就是從概念上將數組分成1000 x 1,000個大塊,即一次讀取一千行,計算這個轉置,並將每個塊寫入文件。然後你可以做一個合併通行證,你在這些塊中讀取(以轉置的形式)並流出最終文件。 – 2012-08-16 19:32:01

回答

1

首先,這將始終需要一個64位操作系統和相當大量的RAM,爲你正在嘗試分配大約8 GB。

如果打開gcAllowVeryLargeObjects,這在理論上可以在Visual Basic中以.NET 4.5爲目標。也就是說,如果可能的話,我會推薦使用jagged array而不是多維數組,因爲這將消除需要單個8GB分配的需求。 (這也可能允許它在.NET 4或更早版本中工作。)

+0

嘿裏德,感謝您的幫助!我在我的VS2010版上試過了一個鋸齒狀的陣列,但沒有運氣。所以我正在下載並安裝.net4.5 :)我會回來後發佈,如果我得到它的工作!再次感謝! – FraserOfSmeg 2012-08-16 08:21:36

+0

@ user1601928你有多少內存?你在什麼操作系統上? – 2012-08-16 16:15:42

+0

目前在我的筆記本電腦上運行它:4GB內存,贏7 - 64,英特爾I5 2.3GHz。我將如何實際打開gcAllowVeryLargeObjects?我已經下載了最新的VB,但我不知道如何實際打開它:/任何幫助,將不勝感激:) – FraserOfSmeg 2012-08-16 17:24:47