Windows 内存详解(六) C# WinForm应用程序降低系统内存占用方法总结

这篇文章主要介绍了C# WinForm应用程序降低系统内存占用方法总结,本文总结了9个方法,同时给出了一个定期清理执行垃圾回收代码,需要的朋友可以参考下

背景:

微软的 .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、注意变量的作用域,具体说某个变量如果只是临时使用就不要定义成成员变量。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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C知道:C# WinForm应用程序是使用C#语言和WinForms框架构建的Windows桌面应用程序。下面是一些关于C# WinForm应用程序的基本概念和特点: 1. 窗体(Form):WinForm应用程序的主要界面是窗体,它是用户与应用程序进行交互的主要界面元素。你可以在窗体上添加各种控件来构建用户界面,如按钮、文本框、标签等。 2. 控件(Controls):WinForm提供了一系列预定义的控件,用于构建用户界面。你可以将这些控件拖放到窗体上,并通过属性窗口来设置它们的属性和行为。一些常见的控件包括按钮(Button)、文本框(TextBox)、标签(Label)、列表框(ListBox)等。 3. 事件处理(Event Handling):WinForm应用程序通过事件处理来响应用户的操作。你可以为控件的事件(如按钮点击事件)编写事件处理程序,当事件发生时,相应的代码将被执行。例如,你可以在按钮点击事件中执行某个操作或打开另一个窗体。 4. 数据绑定(Data Binding):WinForm支持简单的数据绑定,使你能够将数据源与控件进行绑定,从而实现数据的显示和更新。你可以使用数据绑定来将数据库、集合或其他数据源中的数据显示在控件中,或者将用户输入的数据保存到数据源中。 5. 对话框(Dialogs):WinForm提供了一些预定义的对话框,用于与用户进行交互,如消息框、文件选择框、颜色选择框等。你可以使用这些对话框来获取用户输入、显示提示信息或执行一些特定的操作。 6. 多线程支持(Multithreading Support):WinForm应用程序可以利用多线程来处理耗时操作,以保持界面的响应性。你可以使用后台线程来执行长时间运行的任务,而不会阻塞主线程,从而使用户能够继续与应用程序进行交互。 总而言之,C# WinForm应用程序是一种使用C#语言和WinForms框架构建的Windows桌面应用程序。它提供了一种简单而直观的方式来创建用户界面,并通过事件处理和数据绑定来实现交互和数据操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值