-- in class definition

——在类定义中

[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]

internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);

[DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]

internal static extern IntPtr GetCurrentProcess();

-- code to call when you want to reduce the memory

--要减少内存时调用的代码

IntPtr pHandle = GetCurrentProcess();

SetProcessWorkingSetSize(pHandle, -1, -1);

使用SetProcessWorkingSetSize函数并不能提高什么性能,也不会真的节省内存,反倒往往会造成一些内存错误,造成应用程序或者系统不稳定,微软自己也建议在建立进程,线程,内核池,就必须小心的使用该函数。

因为他只是暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用。如果你强制使用该方法来 设置程序占用的内存,那么可能在一定程度上反而会降低系统性能,因为系统需要频繁的进行内存和硬盘间的页面交换。

当我们的应用程序刚刚加载完成时,可以使用该操作一次,来将加载过程不需要的代码放到虚拟内存,这样,程序加载完毕后,保持较大的可用内存。

这个东西一般就是整理内存的软件用来骗人的,或者是对于内存占用有强迫症的用户,拿这个安慰他们。

内存占用量的数值有很多种,你看到任务管理器的那个privateworkingset,有些内存占用在这里看不出来,比如开线程占用的栈空间。实际上是要看virtualsize,如果32位程序超过了2GB,64位程序超过8TB,就会溢出。关于系统在资源方面的限制,做sysinternals的MarkRussinovich写过可以参考。.net本身在分配内存的时候也有些限制,比如就算是在64位下,byte[]最大也只能是2GB。也有些溢出的错误并不是真正的溢出,比如GDI+的有些错误也会被误报成溢出。定位内存泄漏有dotMemory/ANTSMemoryProfiler之类的工具可以用。它们就是监视一段时间的内存分配,在完全GC回收后,看还有哪些对象留下来,辅助你分析。

在应用程序中,往往为了释放内存等,使用一些函数,其实,对于内存操作函数要谨慎使用,比如大家常常想到的 SetProcessWorkingSetSize,其实对于windows来说,系统会自动在程序闲置时(如程序被最小化)释放内存的,自己用内存释放 时,往往会造成一些莫名的内存错误,造成自己的应用程序及系统不稳定。

转载于:https://www.cnblogs.com/njccqx/p/9972851.html

C#定时清理内存,net网页端可以尝试使用相关推荐

  1. Ubuntu如何定时清理内存

    Ubuntu如何定时清理内存 1.进入su jiqing@Ubuntu:~$ su 密码: root@Ubuntu:/home/jiqing# 2.创建cleanCache.sh #!/bin/bas ...

  2. C#中System.Timers.Timer定时器的使用和定时自动清理内存的应用

    项目比较大有时候会比较卡,虽然有GC自动清理机制,但是还是有不尽人意的地方.所以尝试在项目启动文件中,手动写了一个定时器,定时清理内存,加快项目运行速度.仅供大家参考吧,代码如下: public cl ...

  3. 自动清理内存linux,linux 过滤内存使用率并于计划任务结合来自动清理内存缓存...

    过滤出内存使用率并进行判断 #!/bin/bash echo "###cleand free_cache script########" #memory usage mem_pus ...

  4. android开发 清理内存不足,Android现在还需要清理内存吗?不!

    对于很多人而言,尤其是那些有强迫症者,这是个然并卵的命题,但是在我们周围,还有很多这样的智能手机用户:怎么这个手机3G内存,空闲的也只有600MB呢?以前那个2G内存的手机都有800MB的空闲,我要一 ...

  5. android平板内存清理,需要给安卓手机清理内存么?不用!

    我知道,对于很多人而言,尤其是那些有强迫症者,这是个然并卵的命题,但是在我们周围,还有很多这样的智能手机用户:怎么这个手机3G内存,空闲的也只有600MB呢?以前那个2G内存的手机都有800MB的空闲 ...

  6. android机清理存储卡,越用越卡!Android手机需要清理内存吗?

    我知道,对于很多人而言,尤其是那些有强迫症者,这是个然并卵的命题,但是在我们周围,还有很多这样的智能手机用户:怎么这个手机3G内存,空闲的也只有600MB呢?以前那个2G内存的手机都有800MB的空闲 ...

  7. buff/cache内存缓存过大,设置定时清理

    buff/cache内存缓存过大,设置定时清理 buff/cache居然占用内存达到10个G的内存 1.编写脚本 vim cleanCache.sh sudo sh -c "echo 1 & ...

  8. Linux工作笔记036---Centos下查看cpu、磁盘、内存使用情况以及如何清理内存

    JAVA技术交流QQ群:170933152 Centos下查看cpu.磁盘.内存使用情况以及如何清理内存 核查服务器基本情况 查看内存使用情况 free -m 查看cpu使用情况 top #查看进程运 ...

  9. android 图片内存缓存文件在哪个文件夹,别再用手机管家清理内存了!1分钟删掉这些文件夹,内存多出几个G...

    原标题:别再用手机管家清理内存了!1分钟删掉这些文件夹,内存多出几个G 你的手机内存还剩多少G?我们在使用手机时,都会产生大量的缓存数据,如果不定期清理,就会积少成多,导致手机内存空间爆满. 你有定期 ...

最新文章

  1. Oozie 任务调度
  2. 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构]
  3. oracle锁表语句执行提示无法终止当前对话_Oracle 强制中止正在执行的SQL语句
  4. stringbuilder寻找字符串位置可能存在多个 java_Java 语言基础amp;String
  5. ACM大牛总结的线段树专辑
  6. 把 mysql sql_mode 设置为严格模式的方法
  7. VBS脚本病毒原理分析与防范
  8. win7下快捷方式关联错误的修复
  9. C语言中向量的加法,向量的加减法运算法则
  10. Windows域/域树/域林的简单区别
  11. 如何从macOS Catalina向iPhone添加自定义铃声
  12. 安装redhat 8.0红帽系统
  13. zabbix的php最低版本,ZABBIX企业监控实践(3):升级与配置PHP
  14. 天干地支(python)
  15. 2023年贵州大学文艺学专业考研上岸经验
  16. Oracle 报错ORA-00904: 标识符无效 ,但是列名和表名没有写错
  17. 主板开启网络唤醒_网卡(网络)唤醒BIOS设置教程
  18. UVa679 Dropping Balls (满二叉树+开关灯思想)
  19. [一步步学数据结构与算法 20]-哈希算法(上)
  20. 数据分析工程师需要考虑的问题

热门文章

  1. 工业物联网为“两化融合”带来巨大推力
  2. OCR文字识别软件的快速任务功能如何用
  3. Atitit.研发管理---api版本号策略与版本控制
  4. 石大ACM2587解题报告
  5. Webservice开发流程
  6. 获取子页面iframe的点击事件及iframe跨域的交互
  7. 聚类分析基础知识总结及实战解析
  8. grunt合并压缩js、css文件
  9. DataReader 连接数据库完整过程和代码(Sql Server)
  10. EntityFramework 4.x 使用中遇到的问题 (2)