如何减小DevExpress的php 内存使用量量

  从Delphi时代开始一直都是DevExpress系列控件的忠实用户,到现在已经有10多个年头了。DevExpress里面的控件基本从头到尾都用过一次,而且也开发过很多基于DevExpress的子控件。对于像我们这样的小团队来说,使用DevExpress控件可以解决界面风格及基本美化的问题,毕竟让程序员代替美工是一件不靠谱的事情。
  但是在.NET环境下,DevExpress有一个很大硬伤,就是使用了DevExpress控件的项目,其启动速度可谓惨不忍睹,而且程序运行非常耗费资源!如果客户电脑的配置没有2G以上内存的话,基本上就跑不动了。而且即使在2G内存下,程序的执行速度依然并不理想。一些实施工程师去客户现场测试过,发现如果电脑冷启动后执行程序,从双击程序到出现程序主画面,基本要20秒左右。即使是热启动,程序也基本需要5、6秒的时间。由于开始之初没有料到速度会如此慢,在项目后期再修改已经来不及了。所以这个项目基本就是因为DevExpress速度问题未能解决而失败告终。
  立即着手研究第二代产品,首先要做的是在保证界面美观性的情况下,寻找可以编写出美观界面的控件。但经过一段时间的测试,检测了Telerik等大型套装控件后发现,速度问题依然不是很满意,和使用自带WinForm自带控件的程序相比,两者速度有非常明显的差别。
  于是决定自行开发基于WinForm的界面控件,结果就有了SMT-WinControl了。SMT-WinControl整个类库只有200KB(DevExpress一整套界面有几十MB),并且里面已经包含了一套皮肤(基于DevExpress Style)。SMT-WinControl的各个控件都是多功能的,这样使用起来更加方便,这个在后面会对每一个控件进行详细说明。但最重要的是,新项目基于这个控件进行开发,启动速度是用毫秒来计算的。
下面是项目的一些截图,自我感觉还不错吧。
当然,这里只是展示了几个最基本的控件。但SMT-WinControl已经包含了数十个控件,可谓功能强大。在后面的章节中,我们会继续逐一介绍。
阅读(...) 评论()
深圳市米软科技有限公司(米软科技 ),专注于 HR 人力资源管理软件、HIS 医院信息化管理软件、OA 智能办公软件开发Windows 内存详解(六) C# WinForm应用程序降低系统内存占用方法总结 - CSDN博客
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
本文已收录于以下专栏:
相关文章推荐
Winform 内存不足
Winform,我给PictureBox 赋值 picBox_One.BackgroundImage = Image.FromFile(&图片&);  
  总共8个Pi...
这篇文章主要介绍了C# WinForm应用程序降低系统内存占用方法总结,本文总结了9个方法,同时给出了一个定期清理执行垃圾回收代码,需要的朋友可以参考下
微软的 .NET FR...
微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存...
微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存...
下面我根据VMMap来详细介绍一下内存的分类。
内存是一个很复杂的系统,其中的paging file,sharable memory,reserve和commit等概念使得要算清楚一个进程到底使...
内存断点原理:
       内存断点原理,通过将内存断点所在内存页的属性修改为内存断点属性(non-access or non-writable),程序执行时,对目标内存页中所有数据的访问或写...
using System.D
// 获得为该进程(程序)分配的内存. 做一个计时器,就可以时时查看程序占用系统资源
标 题: 【原创】一种保护应用程序的方法 模拟Windows PE加载器,从内存资源中加载DLL
作 者: shangzh
时 间: ,23:14:51
链 接: http:...
目前很多敏感和重要的DLL(Dynamic-link library) 都没有提供静态版本供编译器进行静态连接(.lib文件),即使提供了静态版本也因为兼容性问题导致无法使用,而只提供...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 堆内存使用量 的文章

 

随机推荐