作者u5484 (ROCK N ROLL)
看板C_Sharp
標題[問題] 請問有關於ArrayList 的最大極限
時間Thu Nov 17 23:47:23 2011
不好意思 小弟想請教一下ArrayList是否有使用上之極限的問題,由於小弟現在需要讀取
約200MB 內含約249429840個數值的二進位檔案,作業環境是在XP底下, 由於有套用其
他函式庫的關係,只能在XP底下執行
FileStream fs = new FileStream(openFileDialog1.FileName,
FileMode.Open);
BinaryReader br = new BinaryReader(fs);
int nBytes = Convert.ToInt32(fs.Length);
odf = new float[nBytes / 1284][];
for (int i = 0; i < nBytes / 1284; i++)
{
odf[i] = new float[642];
}
ArrayList SmallArray = new ArrayList();
for (int o = 0; o < nBytes / 1284; o++)
{
for (int j = 0; j < 321; j++)
{
SmallArray.Add(br.ReadSingle());
odf[o][j] = Convert.ToSingle(SmallArray[j + 321 * o]);
}
資料存取方面則是在存取全部數值時會有錯誤,已經嘗試過可以讀取總數為77040000個數
值的檔案 但讀取全部檔案時候
便會再SmallArray.Add(br.ReadSingle()); 出現out of memory exception 例外狀況
請問有何方法可提高效率嗎? 或是小弟程式碼真的有誤
有在WIN7底下試作只單純作"存取"這個動作,而結果是正常運作的,.net framewrok版本
為3.5,PF使用量則達到4.5G左右
所以可以判斷應該不是Arraylist容量的問題,扣除掉這些小弟能想到的便是: (1)單純記
憶體真的不足 (2)程式寫法有錯誤,並沒有將占用的記憶體釋放出來
由於總檔案才237MB,又因需要一次全部讀取進來,所以才苦腦於是否有辦法能夠降低其
使用率亦或其他有效之方法。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.128.137.29
1F:→ james732:不知道C#有沒有Memory Map File之類的東西 11/17 23:50
2F:推 Laluth:應該是xp 32bit的限制 單一執行緒使用記憶體上限是2G 11/17 23:58
3F:推 ericinttu:249429840個數值 用什麼型態存? 11/17 23:59
4F:→ ericinttu:除了這個ArrayList之外,有其他變數也是儲存類似數量的嗎 11/18 00:00
5F:→ u5484:型態的話是使用Float下去儲存 11/18 00:01
6F:→ u5484:目前來說 只有這個Arraylist儲存如此龐大的數量 在分批放置 11/18 00:03
7F:→ u5484:於二維陣列中 11/18 00:04
8F:→ iterator:有需要用到SmallArray這個東西嗎?看起來直接讀進odf即可 11/18 09:56
9F:→ u5484:感謝樓上提醒 是我太固執了= = 感謝 11/18 16:49