当前位置: 首页 > 编程笔记 >

C# WinForm应用程序降低系统内存占用方法总结

伏子辰
2023-03-14
本文向大家介绍C# WinForm应用程序降低系统内存占用方法总结,包括了C# WinForm应用程序降低系统内存占用方法总结的使用技巧和注意事项,需要的朋友参考一下

背景:

微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其是 winform 程序,其主要原因是因为.NET程序在启动时,是需要由JIT动态编译并加载的,这个加载会把所有需要的资源都加载进来,很多资源是只有启动时才用的。

以XP 系统为例子,程序启动后,打开任务管理器,会看到占用的内存量比较大,你把程序最小化,会发现该程序占用的内存迅速减小到一个很小的值,再恢复你的程序,你会发现内存占用又上升了,但是比你刚启动时的内存占用值还是小的,这就是一个资源优化的过程,这个过程是操作系统主动完成的。

结论与展望:

创新设计大赛的项目已经快到交付的日期了,都说Winform占用内存大,于是想着看看自己写的基于手机邮件的远程关机软件(Mail_Based_Remote_Shutdown)占用内存情况,整个开发过程自己也在尽量写一些比较优美的代码来减少系统内存占用,今天看了下,刚打开时占用20M内存,然后一点点增加,最后到80多M,真是无法忍受,每次都是写了之后回过头来才发现自己的代码很丑,系统架构师的作用就体现出来了。

这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考:

1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多
2、强制垃圾回收
3、多dispose,close
4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具体见附录。
5、发布的时候选择Release
6、注意代码编写时少产生垃圾,比如String + String就会产生大量的垃圾,可以用StringBuffer.Append
7、this.Dispose();    this.Dispose(True);   this.Close();    GC.Collect();  
8、注意变量的作用域,具体说某个html" target="_blank">变量如果只是临时使用就不要定义成成员变量。GC是根据关系网去回收资源的。
9、检测是否存在内存泄漏的情况,详情可参见:内存泄漏百度百科

附录:定期清理执行垃圾回收代码


//在程序中用一个计时器,每隔几秒钟调用一次该函数,打开任务管理器,你会有惊奇的发现

 

#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)

{

App.SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);

}

}

#endregion

 类似资料:
  • 本文向大家介绍Android系统检测程序内存占用各种方法,包括了Android系统检测程序内存占用各种方法的使用技巧和注意事项,需要的朋友参考一下 1.检查系统总内存 第一行MemTotal就是总内存。一般并不会等于手机标榜的数值。说是2G内存的手机,会在1.8G左右 2.检查某个程序的各类型内存占用 可用dumpsys meminfo 包名。不知道包名的话,可以用ps命令得到所有运行的程序,也包

  • 问题内容: Tomcat 5.5.x和6.0.x Grails 1.6.x Java 1.6.x OS CentOS 5.x(64位) VPS服务器,内存为384M JAVA_OPTS:尝试了许多组合-包括以下内容 出口JAVA_OPTS =’-Xms128M -Xmx512M -XX:MaxPermSize = 1024m’ 导出JAVA_OPTS =’-server -Xms128M -Xmx

  • 我目前正在Jetty中运行一个Grails应用程序。它运行良好,但占用的内存比我想要的多。 显示Jetty正在运行,如下所示: 在我看来,Jetty可能使用的最大内存应该是。相反,它看起来是这样的: 显然,我不会期望内存使用量正好是320 MB,但难道不应该接近吗?为什么会是预期内存的两倍?如果有的话,那么当堆填满时,Java难道不应该拒绝分配更多的空间吗? 我试着详细了解是怎么回事,但在我看来,

  • 问题内容: 有-Xmx和max-heap-size(jnlp)选项来设置Java应用程序可以使用的最大内存。 如果未指定这些选项,则允许应用程序在系统中仅使用少量的可用物理内存。 这就是人们使用-Xmx允许应用程序使用更多内存的原因。但这对我来说确实是一场噩梦,因为客户端计算机上可能会有不同的内存,甚至应该考虑使用OS。 有什么方法可以让Java应用程序在系统中使用最大可用内存? 谢谢。 问题答案

  • 嗨,我对java编程还比较陌生。我编写的下面的程序似乎占用了很多内存(大约240 MB,正常吗?-我不这么认为!)请建议一些方法来优化这个程序,以便减少内存存储。 程序-- 代码-

  • 在这个方向上的任何输入或指针都将是最受欢迎的。 最好的做法是始终从最小的依赖项开始向上构建应用程序,并且只在需要时添加更多的依赖项。是否有更多的良好实践可以遵循,以进一步保持应用程序的规模更小?