C# 内存问题如何解决. 系统是一个多线程处理的,多个地方涉及多线程,包括列表更新,读取 还有很多临时的引用类型变量 不知道哪里不对,内存一直慢慢攀升,请问 一般可能的原因是什么?怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 真的没什么经验方面的提示吗?我习惯这样解决: Pre_lstVehicleInfo = null; Pre_lstVehicleState = null;有涉及多占用的用using 或者使用Disponse() 除非缺内存,否则GC是不会主动释放的。GC.Collect()?不推荐这个方式 如果非托管资源你都主动释放了,那就表示CLR认为按照你当前计算机的状况,可以分配更多的内存,可以在更晚的时候释放不再使用,托管的内存,你可以开启几个大的应用程序,然后观察一下,原来程序的内存增加是否停止,甚至减少。如果是这样的话,你完全不必担心所谓内存泄露的问题。在.net时代,内存泄露挺少发生的。 那要看你的程序是不是真的需要这些内存,如果需要,那就等程序运行完毕用GC.Collect,否则优化你的程序 可以用WinDbg。进程运行一段时间后(确认内存在持续增加),用WinDbg Attach进程,加载.NET调试库,执行DumpHeap命令,看哪个数据类型占用的内存多,再进一步分析可能泄露的原因。 每过一段时间 释放一下内存 #region 释放内存 [DllImport("kernel32.dll")] public static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize); public static void GarbageCollect() { GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } public static void FlushMemory() { GarbageCollect(); if (Environment.OSVersion.Platform == PlatformID.Win32NT) { Form_Main.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); } } #endregion 怎么调用别人做的类 急!!!!!com组件读取excel2007和2003 到时间自动删除数据库符合条件的数据,高手来 TreeList绑定问题. 求助!关于QQ2010密码框的输入 winform工具栏控件如何设置键盘快捷键? 我用c#做程序,用JavaScript弹出对话框之后,我的网页会变形,这个问题该怎么去解决? --如何用C#程序执行一个“系统-开始-运行”里面的命令-- 求C#编写的BT服务器端源码 问个防止反编译的问题:) 问一个菜鸟问题? IHTMLDocument使用的一个问题(可追加分的)
我习惯这样解决:
Pre_lstVehicleInfo = null;
Pre_lstVehicleState = null;有涉及多占用的用using 或者使用Disponse()
GC.Collect()?不推荐这个方式
[DllImport("kernel32.dll")]
public static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
public static void GarbageCollect()
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
} public static void FlushMemory()
{
GarbageCollect(); if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
Form_Main.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
#endregion