本帖最后由 wangjiao2011 于 2011-08-15 09:01:10 编辑

解决方案 »

  1.   

    俺也不清楚每次关闭窗体是不是要用dispose方法,同求解
      

  2.   

    如果真是占用内存过多的话,最好在关闭子窗体的时候把窗体上每个控件都dispose,把定义的变量之类的也都设成null
      

  3.   

    50M的程序?什么样的程序需要做得那么大?其中有20M的固定分配给.Net环境的, 要像不占用过多的内存,使用过的对象记得及时手动销毁,比如Image Graphic等类就很占内存,不要等到GC来帮你回收资源.一些程序内部使用的资源可以放在外部的文件中 使用的时候进行调用即可.不需要都包含在项目中.
      

  4.   


    #region 回收内存方法组
    /// <summary>
    /// 设置操作系统实际划分给进程使用的内存容量
    /// </summary>
    /// <param name="hProcess">指定一个进程的句柄</param>
    /// <param name="dwMinimumWorkingSetSize">用于装载最小进程容量的一个变量</param>
    /// <param name="dwMaximumWorkingSetSize">用于装载最大进程容量的一个变量</param>
    /// <returns></returns>
    [DllImport("kernel32.dll")]
    public static extern int SetProcessWorkingSetSize(IntPtr hProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize); private static readonly Version myVersion = new Version(1, 0);
    /// <summary>
    /// 将当前进程的内存占用尺寸设置到最小
    /// </summary>
    /// <returns>0为成功,-1为失败</returns>
    public static int SetProcessMemoryToMin()
    {
        return SetProcessMemoryToMin(System.Diagnostics.Process.GetCurrentProcess().Handle);
    }
    /// <summary>
    /// 将内存占用尺寸设置到最小
    /// </summary>
    /// <param name="SetProcess">需要设置内存使用范围的程序进程句柄,一般为当前进程,如:System.Diagnostics.Process.GetCurrentProcess().Handle</param>
    /// <returns>0为成功,-1为失败</returns>
    public static int SetProcessMemoryToMin(IntPtr SetProcess)
    {
        GC.Collect();
        GC.Collect();
        if (Environment.OSVersion.Platform == PlatformID.Win32NT)
        {
            return SetProcessWorkingSetSize(SetProcess, -1, -1);
        }
        return -1;
    }
    #endregion
    在程序中直接调用
    SetProcessMemoryToMin(); 即可
    刚才发的是没有发上来还是被删掉了??? 为什么???
      

  5.   

    System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();
      if (p.WorkingSet > 10240000)//界限
      {
      p.MaxWorkingSet = p.MaxWorkingSet;
      }
      

  6.   


    我想问问你的机器上有多少内存?假设我们的服务运行了一整天,结果它占用内存300M,这我非常欣慰。因为这说明不少内容快速地缓存起来了,让程序运行得更好。我们的服务器只是一台低档的PC机,只有区区2G物理内存,而且开着数据库服务器、web服务器等等,那么连我们自己的业务加起来其内存占用可能也不过平均1.3个G,有什么必要担心内存不够的?非要宁可牺牲程序正常运行效率也要把内存暂时释放到2M?仅仅为了欺骗客户一下(给客户炫耀一下我们会在程序管理器的显示窗口上作假)?
      

  7.   


    释放进程所声明的内存空间,跟什么“手动调用dispose方法”半点关系也没有。dispose充其量你可以说是“释放资源”,但是释放什么资源?你了解过吗?
      

  8.   

    写的程序50M,在.net领域下算是巨型系统了(5千万个字节,就算20个字节为一条语句,那也有250万条语句),赶超我们的解放军女兵了。如果加上“才”,那就超牛了。貌似50k更确切些吧。如果真是50MB,执行的功能有很少,只能说里面放了多媒体(图片)占数据太多了。