程序实时的获取数据,一方面要实时显示出来,另一方面要保存数据,一开始到现在,都一直把数据直接保存在了txt文本文件中(按组分别存放在了100个文件中),没有把它放到数据库中,程序不间断运行时间一整天,这个时候产生的文本文件已经200MB以上。
    现在的问题来了,生成了这些数据,之后要对这些数据做分析,用程序读取这些数据,读取完了之后要显示在图表中(用了dundas控件),因为涉及到很多的窗口,每个窗口显示的数据是不一样的,虽然来源一样,所以我用了最简单的方法,打开一个窗口之后再去读数据,放在内存中,这样打开同时打开大部分数据之后,查看了一下内存使用,已经占用了将近1G了,菜菜鸟向大家请教,碰到这种问题的时候如何解决,如何优化程序,现在不知道怎么去解决它。有点尴尬。

解决方案 »

  1.   

    根据要求,用Stream.Read 某个startPos到endPos的byte再转成数据,然后缓存到临时文件中。
    不要一口气把200M的文件全都读进来。
      

  2.   


    我在想我是不是可以在一个首页上读取了之后 设置成public static类型的,这样也想过,后来发现,主页上的跟后面的还是有点区别的。
    不知道这个数据怎么组织,怎样利用率高
      

  3.   

    你首先要确认一下,是否分析时,所有的数据都要放到内存里?
    如果不是,那么,你可以分组读(逻辑上够分析用,如果一次一行就可以处理,可以按行读或读N行)。readline(),读一行,分析一行(这只是个抽象,也许你要读N行)。如果 需要全部装到内存里,内存映射也不失为一种选择,不过,技术上比这个稍微复杂一点。要用api.还有一个选择是流,性能介于以上两者之间。不要说流中读不出来文本。用内存映射时,可用数据受限于内存空间大小。不过,一般情况下,够用了。
      

  4.   


    这是GC的效果,不会立即回收内存。就算你调用GC.Collect()也不会马上回收。这个没有关系。只要你确实有释放。
      

  5.   

    内存映射没听过,流的形式?你说的是读取文件吗?读文件用StreamReader的readline的方法。读文件没问题,就是读出来之后,怎么去存在内存中最小占用空间
      

  6.   


    那关闭那个窗体算是释放了吧,为什么还是不行呢?
    GC.Collect()调用了之后还是不能释放资源的啊?
      

  7.   

    内存映射是一种在数据库系统中使用很普遍的技术。
    http://www.cnblogs.com/criedshy/archive/2010/06/13/1757826.html这里有个链接,凑合着看下吧