.net中清理内存,清理占用内存方式方法

#region 内存回收
       [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
        public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
        /// <summary>
        /// 释放内存
        /// </summary>
        public static void ClearMemory()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
            }
        }
        #endregion

在系统中使用 SetProcessWorkingSetSize方法做了一个测试,调用该方法后,占用内存从80M降到2M.(TaskManager观察的结果)按 照知秋一叶的说法,这样调整WorkingSet,将有可能导致缺页中断,严重影响性能。 但是从使用的情况来看,没有发现这样的现象

public Form1()
         {
             InitializeComponent();

            //每1分钟 检查一次
            System.Timers.Timer timer = new System.Timers.Timer(60 * 1000);
            timer.Elapsed += timer_Elapsed;
            timer.Start();
         }

        private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //1 比较时间是否有效  HH:mm
            DateTime starttime = e.SignalTime;
            string time = ConfigurationManager.AppSettings["ClearMemory_PerdayTime"];//"05:00"
            string dtNow = starttime.ToString("yyyy-MM-dd HH:mm");
            DateTime dayDefine = DateTime.Parse(starttime.ToString("yyyy-MM-dd") + " " + time);
            if (dayDefine.ToString("yyyy-MM-dd HH:mm") == dtNow)
            {
                //2 启动垃圾收集器
                ClearMemory();
                LogWarning(DateTime.Now.ToLongTimeString() + " :释放内存!");
            }
        }

注意,引用命名空间:using System.Runtime.InteropServices;

时间: 2024-10-02 18:31:45

.net中清理内存,清理占用内存方式方法的相关文章

python_清理占用内存的脚本

脚本内容如下: vim    ~/shell/clean_cache.py 1 #!/usr/bin/python 2 #conding=utf-8 3 #该脚本用于清理服务器当中占用内存20G以上,运行时间超过3小时以上(或1天以上的)进程. 4 import os 5 #import psutil 6 7 pslist = os.popen('ps -auxf','r').readlines() 8 for list in pslist: 9 p = list.split() #以空格分割

Redis中有序集合与列表占用内存分析

在说正题之前需要先了解几种定义:字典.压缩列表与跳跃表. 字典:非常常见的数据结构,key-value结构. 常见的实现有红黑树(stl中的map),哈希表(stl中的unordered_map).红黑树的查找操作具有O(logN)的时间复杂度.哈希表的查找操作具有O(1)的时间复杂度. redis中的字典使用哈希表作为底层实现. 压缩列表:由一些列特殊编码的连续内存块组成的顺序型数据结构. 压缩列表可以包含多种节点(只能保存一种的那叫数组). 压缩列表的优点是节省内存.顺序结构拥有的缺点压缩列

(转)增加定时检测linux占用内存,及时清理功能

增加定时检测linux占用内存,及时清理功能 原文:http://www.voidcn.com/article/p-wnmannom-boa.html free -m 查看,发现内存跑满了. 再 top,然后按下shift+m,也就是按内存占用百分比排序,发现排在第一的进程,才占用7.9%. 但是总内存大小8G,竟然有5G都被使用了, 那是什么占用的呢? 百度了一下,据说是centos为了提高效率,把部分使用过的文件缓存到了内存里. 如果是这样的话,我又不需要这样的文件性能,那就可以释放.如下两

java中的各种数据类型在内存中存储的方式

1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间.释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作.但同时,它也加重了JVM的工作.因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请.引用.被引用.赋值等,GC都需要进行监控. 2.什么叫java的内存泄露 在j

一个给开发者使用的Android App内存清理、监控工具

MemoryMonitor 一个给开发者使用的Android App内存清理.监控工具,可以获取当前手机的内存使用比率,可用内存大小,检查一个APP是否存在内存泄漏. 并且整理了一些优化内存的方式. 0.GitHub地址 https://github.com/cundong/MemoryMonitor 1.内存清理 类似360卫士的 加速球,获取系统已用内存比率.可用内存大小,一键清理. 可以用于测试自己开发的Activity.Fragment健壮性,模拟Activity.Fragment被回收

Linux的内存清理[缓兵之计]

最近公司的测试服务器Ubuntu服务器的内存一直占用很高,本来是1G的内存,结果可用内存一下子就占到了937M,导致可用的内存很少: 最后的解决方案: 1.查看内存: free -h: [email protected]:/home/shell# free -h total used free shared buffers cached Mem: 993M 340M 653M 16M 460K 40M -/+ buffers/cache: 299M 694M Swap: 0B 0B 0B 清理命

用windbg+sos找出程序中谁占用内存过高,谁占用CPU过高(转载)

原文地址: http://www.cnblogs.com/Lawson/archive/2011/01/23/1942692.html 很早看到windbg+sos方面的知识,一直没仔细学习,也许因为自己做的系统还不够复杂,也没线上真实环境查看的权限,一直没学习这方面的知识,最近几天仔细找了这方面的资料,自己也写了个可能造成高CPU高内存的测试web页面,发现确实不错,即使一个生手,也可以用工具连蒙带骗的猜出哪里出了问题,当然对一些命令和内部标示更熟悉了后,可以更好的找出问题所在,非常值得学习.

linux memory release commands内存清理/释放命令

linux 内存清理/释放命令 You could find reference from here: http://jingyan.baidu.com/article/597a06436a687f312b5243f3.html Basically it looks like this: ---------------------------------- 清理前内存使用情况 free –m 或者 free 清理内存 echo 1 > /proc/sys/vm/drop_caches 清理后内存

Linux中查看进程占用内存和系统资源情况的命令

用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况... 还有一种办法是 ps -ef | sort -k7 ,将进程按运行时间排序,看哪个进程消耗的cpu时间最多. top: 主要参数 d:指定更新的间隔,以秒计算. q:没有任何延迟的更新.如果使用者有超级用户,则top命令将会以最高的优先序执行. c:显示进程完整的路径与名称. S:累积模式,