none
求助WinForm内存释放问题 RRS feed

  • 问题

  • 我的客户端桌面程序,在用一段时间后,从任务管理器观察,内存会高达数百M。即使我长时间没操作,它的内存也不会变少。

    但如果我点了窗口最小化,内存会立即减少至 1-2M。

    如果我再点了窗口最大化后,内存变为 10多M。

    请问:我如何让程序运行一段时间后能自动将内存释放呢?  例如让程序保持在50-60M以下,每隔一小时清理一次。

    环境:.net framework2  + WinXp Sp3

     


    • 已编辑 stoneca 2011年4月12日 9:02 写错了
    2011年4月12日 9:01

答案

  • 最大化后,你的程序应该执行了某些逻辑,类似重新创建一个些数据的副本并显示在屏幕上,

    比如使用DataGridView之类的.

    请仔细检查你的数据显示逻辑,确保不需要的数据在刷新后不再被任何界面元素引用.

    • 已标记为答案 Paul Zhou 2011年4月21日 2:40
    2011年4月15日 2:32
  •  

    基本上,Winform程序在最大化时会做resizepaint的操作。

    一般我觉得有这几个方面吧,一个是大量的自定义控件、组件在不断更新,激发render事件不断重绘窗体

    还有就是窗体本身的重绘操作,没有考虑到性能优化

    还有数据在不断更新,导致界面刷新。


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Paul Zhou 2011年4月21日 2:40
    2011年4月18日 7:06

全部回复

  • 楼主是用的C#吗? 如果是C# 应该是自己释放内存的,不需要你手动管理内存。

    你的程序里有申请大量内存的地方吗?

    2011年4月12日 11:44
  • 你好,

    .NET程序内存释放是由CLR掌管的,会不定时的清理内存,请问你的程序有实现什么功能?

    是否有使用到很多的非托管资源。

     


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年4月14日 9:52
  • 基本.net Remoting做的一个企业内部生产管理系统。除了窗体,字体相关的东西就没什么非托管资源了。但这些都是常规的操作。

    虽然从远程服务器取数据时有用到内存流操作,但这些绝对都有做关闭释放操作的。都是放在try{...}finally{...}块内的。

    难道各位做WINFORM时没有碰到类似的问题?

    有没有人可以解释一下窗口最小化,再最恢复大化这个过程, windows究竟做了什么?(任务管理器中看到的进程的)内存利用会发生如此大的变化?

    2011年4月15日 0:56
  • 最大化后,你的程序应该执行了某些逻辑,类似重新创建一个些数据的副本并显示在屏幕上,

    比如使用DataGridView之类的.

    请仔细检查你的数据显示逻辑,确保不需要的数据在刷新后不再被任何界面元素引用.

    • 已标记为答案 Paul Zhou 2011年4月21日 2:40
    2011年4月15日 2:32
  •  

    基本上,Winform程序在最大化时会做resizepaint的操作。

    一般我觉得有这几个方面吧,一个是大量的自定义控件、组件在不断更新,激发render事件不断重绘窗体

    还有就是窗体本身的重绘操作,没有考虑到性能优化

    还有数据在不断更新,导致界面刷新。


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Paul Zhou 2011年4月21日 2:40
    2011年4月18日 7:06