作者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