本人在写一个内存储存的微型数据库,最多1.2亿条数据,占用内存空间控制在100G以下。有一个数组是必须得加入的,这个数组全部是数字,而且这些数字的大部分大小都小于256,但是有2%左右会大于256,有0.1%的机率大于UInt16的极限,那么我可不可以封装一个类,让数字小于256的时候使用byte(100)数组,在数字大于256的时候使用int32(100)数组呢?也就是说发现byte数组中有一个数值大小将要大于256,就将byte数组复制到int32(100)数组中去。(数组中的数据是可变的,数组长度是不变的)倘若能实现这个功能的话应该怎么写这个类?当然,这个类肯定不能定义公共变量byte(100),int32(100),这样一定义,内存比int32(100)的占用还多得多。对于几十条几万条数据而言,byte(100)和int32(100)所占用的内存差别是可以忽略的,但是对于1亿条数据来说,byte(100)和int32(100)所占内存的差别是不能忽略的,怎么解决这个问题?

解决方案 »

  1.   


    当然在乎这个差别啊,一个int32(100)就至少是400byte,一亿条数据就是40G内存,那还有其余的东西要存呢。
    若改为byte(100),那就只消耗10G内存。
      

  2.   


    是指用arraylist吗?
    我个人感觉arraylist中存的数据应该有两个,一个地址,一个数值。
    而int32(100)是连续地址存100个数值,不需要保存地址了。
    arraylist中100个地址的大小就和int32(100)所占空间一样了,所以用arraylist存byte类型,个人感觉消耗的资源应该很多啊。
    但也不一定就是这样,我去测试一下,谢谢。
      

  3.   

    int32(100)是有序的。
    各int32(100)之间是无序的。