查看内存被什么应用程序占用
发布网友
发布时间:2022-04-30 01:52
我来回答
共3个回答
热心网友
时间:2022-06-28 11:45
据我所知,这个问题好像并不是单纯的GC问题,关于这个问题我是这么理解的:
一个程序刚运行的时候,没有经过任何的GC操作,因此有很多的内存浪费。这些浪费一部分是由于GC引起的,但是更多的是由其他问题引起的。比如说:一个ArrayList在不足以保存新内容的时候,会将占用空间翻倍。又比如说:某一些非托管的资源还没有被释放,一部分是根本就没有进行释放,另一部分可能需要运行两次的GC才能够释放(Finalize的问题)。
当一个程序最小化之后,会发生什么呢?GC,然后还会释放很多东西,包括非托管资源(比如Pen的Handle等等),此外也许一些类似ArrayList的浪费可能得到了修正,因此你会看到内存哗啦哗啦的狂减。此外,还有一个东西在起作用!那就是虚拟内存:操作系统会把一些可能不常用的东西给放到虚拟内存里面,所以你会看到这时候这个程序所占用的虚拟内存的总量会增加,增加量的大小因程序而异。这个步骤也许CLR有参与(强制Paging),也许没有。但是可以肯定的是,你看到的非托管程序也会有这个现象,估计这一个步骤也会产生影响。
当一个程序从最小化恢复之后,又会发生什么呢?从虚拟内存搬东西出来,然后产生一些非托管资源,比如GDI资源等等(因为你有界面,所以需要画图像啊)。于是你会看到占用的内存变大了,但是比Load的时候要小,因为有些东西释放了之后不会再产生,修正了的浪费现象也不会有逆过程。
其中,我认为非托管资源是造成这个现象的最大问题,因为现阶段版本的GC无法跟踪非托管资源。如果各位不相信,可以创建一个控制台的应用程序看看,也会有这个现象,但是效果就没那么明显了。
向大家介绍一个内存查看工具:vamp。
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/vamp-o.asp
Vamp使用起来非常简单:
vamp -p <process id> -s -o
Vamp会显示各种内存的使用量和各模块的详细信息。以后我会解释各个栏目的意思。
你可以使用tlist来得到一个进程的ID。从我上次post的连接
http://www.microsoft.com/whdc/ddk/debugging/default.mspx
下载调试工具包。 里面就包括Tlist。
我最常用的命令行是: Tlist -t
热心网友
时间:2022-06-28 11:46
打开任务管理器,点开进程选项。里面可以查看每个进程的内存使用情况。就你说的人情况,一是中毒了,二是你装的不知道什么软件可能有冲突了。不知道你对系统进程了解不了解。可以把占用内存多的非系统进程结束掉。看看有没有改善。
热心网友
时间:2022-06-28 11:46
可以用任务管理器查看进程,或者用优化大师,超级兔子之类的程序查看。