[問題] 請問有關於ArrayList 的最大極限

看板C_Sharp (C#)作者 (ROCK N ROLL)時間13年前 (2011/11/17 23:47), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串1/1
不好意思 小弟想請教一下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

11/17 23:50, , 1F
不知道C#有沒有Memory Map File之類的東西
11/17 23:50, 1F

11/17 23:58, , 2F
應該是xp 32bit的限制 單一執行緒使用記憶體上限是2G
11/17 23:58, 2F

11/17 23:59, , 3F
249429840個數值 用什麼型態存?
11/17 23:59, 3F

11/18 00:00, , 4F
除了這個ArrayList之外,有其他變數也是儲存類似數量的嗎
11/18 00:00, 4F

11/18 00:01, , 5F
型態的話是使用Float下去儲存
11/18 00:01, 5F

11/18 00:03, , 6F
目前來說 只有這個Arraylist儲存如此龐大的數量 在分批放置
11/18 00:03, 6F

11/18 00:04, , 7F
於二維陣列中
11/18 00:04, 7F

11/18 09:56, , 8F
有需要用到SmallArray這個東西嗎?看起來直接讀進odf即可
11/18 09:56, 8F

11/18 16:49, , 9F
感謝樓上提醒 是我太固執了= = 感謝
11/18 16:49, 9F
文章代碼(AID): #1EnIoDSP (C_Sharp)
文章代碼(AID): #1EnIoDSP (C_Sharp)