try    ms1:=TmemoryStream.Create;
    Source:=TFileStream.Create(SourceFileSoftprodll,fmOpenRead or fmShareExclusive);
    //对流和文件进行处理.
    .....
 finally
  Source.Free;
  ms1.Free;
 end;
开始我觉得没什么,但是次数多了,竟然发现,内在越来越少,我把这个程序关掉后,内存就正常了.
肯定是程序出的问题.但是我找了所有的变量,发现只要CREATE的,一定FREE了.而且吃内存的速度一时半会是看不出来的.要不停的CREATE和FREE,时间长了就看得出来了.到底是啥问题啊?HELP

解决方案 »

  1.   

    首先try finally 写的不对, 其次中间的代码也有可能出现问题, 应该贴出来为好.
    try finally 按照下面的方式写  ms1:=TmemoryStream.Create;
      try
        Source:=TFileStream.Create(SourceFileSoftprodll,fmOpenRead or fmShareExclusive);
        try
          ...
        finally
          source.free;
        end  
      finally
        ms1.Free;
        ms1.Free;
      end;
      

  2.   

     代码是有问题,sourcefile在打开的时候可能会出错.
    不过我肯定不是这里的问题.
    今天不早了,我看明天能不能写个快速吃内存的程序放在上面.
    我现在是每一分钟CREATE和FREE一次.连续运行几天后,会看出内存减少.四五天后内在只剩几十M了.
    如果只是偶尔调整用一下.不会有任何问题.
      

  3.   

    一般在释放的时候多用try……finally
      

  4.   

    我拿这样的结构解析过 15G 文件。
    呵呵,内存没问题。
    lz 再看看其他地方。
      

  5.   

    try  ms1:=TmemoryStream.Create;
      Source:=TFileStream.Create(SourceFileSoftprodll,fmOpenRead or fmShareExclusive);
      //对流和文件进行处理.
      .....
    catch
    end; 
    if Source<> nil then
      freeandnil(Source);
    if ms1 <> nil then
      freeandnil(ms1);我也遇到过类似这样的问题finally在报错后不执行,正常情况应该是执行的,百思不行其解,最后改为上面的方法,