本帖最后由 q511579599 于 2012-02-11 09:58:06 编辑

解决方案 »

  1.   

    这个跟Dictionary关系不大,应该使用64位系统、将程序编译成64位
      

  2.   


    现在我们用的确实是64位机,程序里没有x64,只有x86,我们选的是any cpu
      

  3.   


    我们在后台用log记录,能看到序号的增加
      

  4.   


    我们还用了另一种方式Sqlite来存储这些数据,需要的时候,用sql语句去查询,但是这种方式太耗时,才想用这种方法把数据全都加载到内存中,Dictionary查找也方便
      

  5.   


    首先谢谢你的回答现在的需求确实是要全部使用的,这些数据本来是以文件形式存在磁盘上的,我们碰到的问题是,把这些数据从文件中load到内存中时,发生内存溢出的。
      

  6.   

    先检测下程序本身可以申请到多少大小的内存,你可以申请一个实际物理内存80%大小的byte[],看看能否成功。
    在上面成功的前提下,测试Dictionary的容量分配,将动态扩容改为静态设置,它有个capacity参数的重载。如果问题还未解决,在实际内存可申请到的前提下,自己定义一个轻量级的Dictionary,反编译微软Dictionary的类并查看,实现Hash算法即可。
      

  7.   

    1.加载数据的时候仅仅加载需要使用的
    2.或者像qldsrx说的那样定义自己轻量级的Directory如果还是不能解决  找老板 找客户  提高机器配置  嘿嘿
      

  8.   

    目前问题算是解决了,和大家分享一下:首先,创建一个固定大小的Directory,免得Directory扩容的时候浪费内存然后,将程序编译成64位,PlatTarget 选X64,提高进城可用内存大小最后,优化程序其他部分。这样加载1900w数据到内存中,在内存只有8G的情况下,只用了9分钟,达到了老板的要求。
    谢谢大家了。