C#内存释放问题 C#内存释放问题:我写的代码,不断运行过程中内存消耗越来越多,到一定程度,程序就奔溃了。请问有什么办法调试哪儿消耗了内存没有释放吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主,我做通信时候的做法:1、通讯类创建类全局缓冲区,尽量不要在发送、接收处理时临时分配心空间。2、使用GC.Collect(),对不得已临时分配空间强制释放。3、实现IDispose接口,显示调用Dispose接口,加速托管资源释放。4、重写Object.Finalize 方法,理非托管资源。 #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 如何读取这个XML? .net与数据库连接实现的问题 通过WebBrowser 如何打开frame中激活的链接 怎样做到文字浮动? 未将对象引用设置到对象的实例 怎么把时间转成16进制 vs2005中如何实现cb - sa - cb引用 Java中的DES算法在C#如何写? 各位大虾,关于Excel操作的问题,难.... form的属性 — 面向对象原则:多组合,少继承;低耦合,高内聚。 新手请教iframe中嵌套table的滚动问题
2、使用GC.Collect(),对不得已临时分配空间强制释放。
3、实现IDispose接口,显示调用Dispose接口,加速托管资源释放。
4、重写Object.Finalize 方法,理非托管资源。
#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