关于.NET环境下的内存占用问题的讨论

bwch_xm 2008-05-07 09:44:56
其实这篇帖子只是抛砖引玉而已,或许这篇帖子连一个转头都不如,呵呵,本人技术限制啊

其实在.NET环境下的内存占用问题一直以来都没有解决(只是据我所知,如果你知道的话,请告诉我,万分谢谢)

.NET环境下的一个小小的程序内存都又可能占用几十兆,可以说是一个吃内存的大家伙了,呵呵

以前在网络上面看到一篇帖子说,具体的作者我不记得了,如果是你写的请告诉我,谢谢

内容如下:

调用API函数减少内存占用的方法

声明如下函数
Private Declare Auto Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal procHandle As IntPtr, ByVal min As Int32, ByVal max As Int32) As Boolean
创建一个过程
Public Sub SetProcessWorkingSetSize()
Try
Dim Mem As Process
Mem = Process.GetCurrentProcess()
SetProcessWorkingSetSize(Mem.Handle, -1, -1)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
调用这个过程后你就会发现,你的程序占用的内存变小了

调用方法:在做完占资源的事后使用,比如webbrowser,在他WebBrowser1_DocumentCompleted里面加入效果最好!

SetProcessWorkingSetSize()

打开来,至少减少了40%内存占用量!爆强

最好用的办法,建一个timer控件,或已有timer控件,在timer事件中加入
SetProcessWorkingSetSize()
这样你的程序再大也就是几百K内存了!注意timer在formload时一定要enable哦!但是还没有仔细测试过,不知道会不会影响进程!


我采用这种方法,在Microsoft Visual Studio 2005内做了一个测试程序,又做了同一个程序,只是没有用上面的方法,这两个程序在附件里面有下载(由于网络原因,附件没能上传,我在想办法)

对这两个程序的内存占用进行了对比,结果如下


已优化 未优化 备注

初始化 19MB 18MB 初始化时的总内存占用之差

初始化 560KB 19.2MB 初始化时的内存占用

初始化 18.1MB 18MB 初始化时虚拟内存占用

运行 45MB 66MB 播放时的总内存占用之差

运行 5.7MB-1MB 41MB-66.5MB 播放网络电视时内存占用

运行 39.3MB 40MB 播放时的虚拟内存占用


通过上面的数据对比,或许大家已经发现了一些问题,经过优化的内存在初始化时的这个程序只占用560KB的内存,但是总的内存却没有比没有优化的内存少占用多少

通过我的对比发现,这种方法是把程序的内存占用转移到Explorer.exe这个进程上面了

上面就是这个帖子的所有内容了,开这个帖子只是为了引起大家对此的讨论而已,,所已我不会给任何分值,因为.NET环境的内存占用实在是太大了,希望引起高手的注意,以解决这个问题

或许我的表达又问题,如果你没有看懂我说了什么,请自己下载附件里面的测试程序,自己测试下
...全文
107 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧