解析一个文件,大概50M,约50W条数据,我要把每条数据转换成一个对象,把所有对象加到一个list里面,对象大概有七八个字段,然后针对这些字段的值进行查询计算操作,现在只要解析一次文件转换成对象就要耗掉200M的内存,求各位大神怎么解才能把内存降下去? 必须要全部信息存,不能只存主键···C# 内存太大

解决方案 »

  1.   

     200M 内存真不算大了
     这性能问题  代码上没什么可优化 无法就是分段 分量去操作数据了
     我读3W 数据都消耗500M 内存  不过内存有1T  随便折腾  自动释放
      

  2.   

    "我要把每条数据转换成一个对象,把所有对象加到一个list里面"
    这就是内存消耗的原因.
    如果你咬死一定需要这样做"我要把每条数据转换成一个对象,把所有对象加到一个list里面"
    那么,此问题就是无解,确实就需要这么多内存.
    另外,该文件格式是什么?
    "读部分的话我要全量查询就没法做了····"
    全部查询,不需要全部载入,就像查询数据库中的表并不需要使用每次都Table Scan一样.
      

  3.   

    要性能就换电脑吧,我用400多元就可以配到主板为G41,4核3.2GCPU,4G内存的主板套装的,淘宝上有卖,你又何必在程序上纠结呢?
      

  4.   

    我记得 我曾经 做过  纯真IP库 的C# 解析;——纯真IP库的数据结构  就显得 标准得多:楼主 能不能用  内存偏移量 等算法 解析 FileStream ——这样就避免了 程序 加载全局数据的 尴尬。(FileStream 不会读取 全部字节 进入内存)——————————————————————————————————————————
    另外,实在不行,大不了 就将文件  一次存入数据库,用数据库查询 就简单多了。(文件的更新频率不高,一天 10次以内的更新,是绝对可以考虑的,你只需要 每隔一个小时 将新文件 重新导入数据库一次就行)——————————————————————————————————————————
    如果你存入 内存的 数据 50M文件没有再增加的可能性——就是说,内存没有再增加的可能性的话。
    你可以将 这 200M 缓存到内存中,不算什么——以后每次查询都读取内存 也是 功德一件。
      

  5.   

    目前服务器单条内存最大一般32G
    那么主板需要提供32条内存插槽才能满1TB,
    这位朋友搞it的不会连内存跟硬盘都分不清吧,
    1TB内存的主机,我第一次听说.
    自己接触过最大也就64GB的,8*4 32核cpu
      

  6.   

      呵呵  你还真oUT 了
      一会给你截张图看看  现在都搞内存服务器了
      

  7.   

    21楼贴这个图出来,并不能说明1TB怎么样..
    我反而觉得这台服务器被浪费了... ...
    如果她是生产环境的服务器 
    2013-02-01 14:34:49 这个时间点,21楼贴图, 
    CPU利用率是0%,
    内存是不到52G.
    这简直就是浪费,而且是超级浪费如果是开发测试环境,我不得不说21楼的公司钱真的很多....虽然内存烂大街了,CPU也不贵,但是也不能这样来浪费.
      

  8.   

    把你说的所有对象(对应一条记录)做成一个对象的一个泛型的字段,这样减少了对象的引用指针,但是其他的功能就要根据你的业务需要来增加了。不过感觉你的需求有不合理的嫌疑,把一大堆东西放在一个list里面没有意义啊,就如同不分页的浏览信息,“都看等于都不看”。
      

  9.   

    1TB  内存不奇怪Intel E7 -8800 系列处理器, 都是大家伙, 单处理器,10核20线程. 四路,就能40核80线程
    在 4 socket的主板上,也就是 4路处理器, 可最大支持 2TB 内存. 单条就可以32GB
      

  10.   

    50W个对象用LIST封装,找死么,
    内存开销太大,不用封装了,自己手写查询计算操作,这样平摊下来内存会少很多
      

  11.   

    不使用 class 用 struct 还能少点。
      

  12.   

    建议转成你熟悉的数据库,然后用SQL语句查询,这样效率非常高。当然,如果你是做考试题目,不让你用数据库,那我飘过算了
      

  13.   

    如果仅仅是要把内存降下去,可以试试定时调用Process.MaxWorkingSet
      

  14.   

    借助中间件嘛,如存在XML中,本地aceess中=======================================================
    .NET快速开发整合框架(RDIFramework.NET),基于.NET的快速开发、整合框架,给用户和开发者最佳的.Net框架部署方案。
    平台博客:[CNBLOGS]http://www.cnblogs.com/huyong 
         [CSDN]http://blog.csdn.net/chinahuyong
    交流QQ:406590790 (请注明:CSDN)
    平台微博:http://t.qq.com/yonghu86
    邮件交流:[email protected]