C#内存释放问题:
我写的代码,不断运行过程中内存消耗越来越多,到一定程度,程序就奔溃了。请问有什么办法调试哪儿消耗了内存没有释放吗?

解决方案 »

  1.   

    楼主,我做通信时候的做法:1、通讯类创建类全局缓冲区,尽量不要在发送、接收处理时临时分配心空间。
    2、使用GC.Collect(),对不得已临时分配空间强制释放。
    3、实现IDispose接口,显示调用Dispose接口,加速托管资源释放。
    4、重写Object.Finalize 方法,理非托管资源。
      

  2.   


    #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