现象如下:
1)启动时内存占用          15M
2)打开数据内存占用        20M
3)关闭打开的数据内存占用  19M
4)再打开数据内存占用      20M为什么第3步关闭后内存没返回到1)的状态.
很多软件都是这样,请问这是怎么回事?还有句柄数也涨了,也不回到原来的值,用什么对象算增加一个句柄?

解决方案 »

  1.   

    具体什么程序,什么系统没说清楚很难说,不过象linux操作系统有内存cache的功能,多用几次后top命令显示会占用内存很大,但是都被cache了.
      

  2.   

    windowsXP下的,如:acrobat reader都有这个现象.
      

  3.   

    任务管理器中有个 System Idle Process 进程它的优先等级最低,即当它执行的时候会进行内存回收,回收量视内存使用情况而定。
      

  4.   

    句柄由windows对象管理器负责管理,你可以搜索“windows对象管理器”以获取更多的有关对象和句柄的知识。
      

  5.   

    这个问题很正常的,没有关系。1)启动时内存占用          15M 
    2)打开数据内存占用        20M 
    3)关闭打开的数据内存占用  19M  // 这里说明它只释放了一部分对象
    4)再打开数据内存占用      20M ===>很多程序启动时并不需要把所有的东西都加载进来,而是在需要时加载。
    程序通常会在第一次加载后并不完全释放某些东西,这样能加快第二次加载的过程。只要在用户重复多次操作后,仍然能够保持在一个相近的值这就是正常的。
      

  6.   


    在Windows环境中,句柄是用来标识项目的,这些项目包括:模块(module)、任务(task)、实例 (instance)、文件(file)、内存块(block of memory)、菜单(menu)、控制(control)、字体(font)、资源(resource),包括图标(icon),光标 (cursor),字符串(string)等、GDI对象(GDI object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域 (region),以及设备描述表(device context)。应用程序打开这样的一个对象,通常都会创建一个对应的句柄。句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。 ====================ZT:
    HANDLE就是PVOID,也就是无类型指针,上面这些资源的句柄Handles都不过是指向struct的指针,至于这个struct的用处,连M$都说unused了,现在解释下M$这么做的意义,这就是所谓数据封装,你可以在你的程序中把M$的内部结构指针传来传去,可是你却不知道它到底指向的内容是什么。句柄与指针确实是完全不同的两个概念。句柄仅仅是一个32位整数,WIN32中用于标记某个系统或进程的对象,可以理解为对象索引(由于M$未完全公开相关技术,在一定程度上只能如此理解),这个索引更像是一种映射关系(从句柄到对象指针的映射),而不是纯粹意义上的“数组下标”。 句柄可以理解为用于指向或标识内存的一块“资源”,这些资源如:文件(file)、内存块(block of memory)、菜单(menu)等等。操作系统通过句柄来定位核心对象和系统资源。指针即为指向内存的“数据或指令”某一单元。说的确切一点,句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。
      

  7.   

    这现象是正常的。用进程管理器查看的是进程所占用的物理内存。程序中分配的都是虚拟内存,如果程序中没有执行LOCK等处理,虚拟内存只有在使用时才会交换到物理内存中,使用完后随时可能交换到到分页文件并释放物理内存,可能立即交换,也可能过一段时间后交换,是系统根据运行情况来处理的。