救命啊!非常崩溃的问题!WPF如何清理内存?

来源:百度知道 编辑:UC知道 时间:2024/06/07 00:59:47
这次做的系统有个严重的BUG...就是不知道怎么清理内存,要是这个程序一直开着并且有人一直在用,占用的内存就会越来越多...直到不可挽回!

难道要我每个类都要重写Finalize来析构,然后再继承IDisposable接口清理一下?总觉得不现实啊...毕竟这样的话每个控件的析构都要自己写死在程序里了,程序也太不灵活了吧?或者在WPF中一个Page能够用一个函数就把自己所有的Component都一次性析构掉?

请牛人拉我一把!感激不尽!
呵呵,首先感谢你细心的回答!
你终于明白俺的意思了,不过目前来说就是不知道如何解决这个问题啊
怎么说呢,目前来说我在用看起来像单例的东西在优化这个系统,但是问题依然还是有不少,因为我估计我目前这个系统会24小时都在运行,所以即使是很少的内存增加,在后期也会显得内存资源捉襟见肘,而且我也不可能给客户说你们要每隔多少小时重启一下系统.....
我现在就想在一定时间内,要是没人使用这个系统我就把生成的Object全部置空,但是我还是发现.NET有点在骗人,那就是我把那些Object置空之后,强制调用GC.Collection(),内存依然得不到释放,所以很无奈啊,.NET明明自己一直在说这样是可以强制GC回收资源的,不知你有何好的办法强制回收资源呢?

晕~其实也不算Singleton,硬要说的话,应该是叫Flyweight,可以减少对象的创建,这样就能节省资源了...
其实我现在的解决方案也是让这个进程Shut down,只是写了另一个入口程序,可以不让用户察觉,哈哈
内存泄露还能有检测软件?我最近还想自己写代码来监控一下呢,貌似不用了哈~我去找找看有没有合适的软件 -。-
非常感谢你的指点~要是有个像你这样牛人带带我我也不用这么痛苦了 T.T

你好,

“要是这个程序一直开着并且有人一直在用,占用的内存就会越来越多...直到不可挽回”

这句话我是相当的不理解……发生这样的事,与WPF没有关系吧?应该是程序本身编写的问题导致内存泄露。

GC会自动调出了作用域的类的析构,即使没有写Finalize,也会直接继承基类的析构函数的,怎么可能有内存一定释放不掉?

所以,问题只能是变量一直没出作用域,也就是设计上的问题。不知道你的系统是什么类型,如果可能,希望你能补充下问题。

==========================================

MSDN中关于NavigationService类的说明:

By default, NavigationService does not store an instance of a content object in navigation history. Instead, NavigationService creates a new instance of the content object each time it is navigated to by using navigation history. This behavior is designed to avoid excessive memory consumption when large numbers and large pieces of content are being navigated to. Consequently, the state of the content is not remembered from one navigation to the next.

默认状况下,NavigationService并不会在导航历史中保存任何导向的目标内容类的实例,作为替代,它每次都创建目标内容的新实例并保存在导航历史中。这个特性被设计用来防止当导航到大的(占内存大的)的成员或内容页时过度的内存消耗。当然,内容页的状态在导航中不会被保存。

=======分割一