WPF 内存泄漏优化经历

原文:WPF 内存泄漏优化经历

最近公司有个CS客户端程序,有个登录界面,有个程序的主界面,程序支持注销功能,但是在注销后,客户端的内存一直以40M-50M的速度递增,因此猜测,应该是WPF程序出现了内存泄漏。下面主要记录优化内存泄漏的整个历程:

1.使用VS2013的性能和诊断找到问题点

在VS2013菜单分析-》性能和诊断,打开的界面如下,并勾选内存使用率选项。

单击开始,启动程序,界面如下所示:

登录后,等待程序资源全部获取后,单击VS2013中拍摄快照

注销后,再次单击拍摄快照按钮

重复上述两个步骤若干次后,关闭软件,内存分析工具会自动进行分析,分析后的结果如下图所示:

选择快照报告数据查看依据,托管堆和堆,我写的程序中是在堆中发现快照2比快照会有40多M内存的上升,上面的图片是优化后的。点击上升的内存,可以进入快照1和快照2内存的对比的表格:

从这个前后内存的对比中,找到是由于主界面的在注销时关闭,再次登录后,主界面重新创建显示,里面ocx的内存发生泄漏。

原文地址:https://www.cnblogs.com/lonelyxmas/p/9847393.html

时间: 2024-11-05 15:18:08

WPF 内存泄漏优化经历的相关文章

Android 内存泄漏优化汇总

android内存泄漏优化摘要 博客分类: android android内存溢出OutOfMemoryError . android移动应用程序的内存分配一般是8凯瑟琳约,不正确地假定处理内存处理非常easy创建OutOfMemoryError.我们的产品是最常见的错误是OutOfMemoryError的异常, 在解决这个异常时在网上发现非常多关于OutOfMemoryError的原因的介绍. OutOfMemoryError主要由下面几种情况造成: 1.数据库的cursor没有关闭. 操作S

Android 内存泄漏优化总结

1,验证是否为汉字 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 // 验证昵称     private boolean verifyNickname() {         String nickname = edt_username.getText().toString();         if (nickname == null || ni

一次Java内存泄漏调试的有趣经历

人人都会犯错,但一些错误是如此的荒谬,我想不通怎么会有人犯这种错误.更没想到的是,这种事竟发生在了我们身上.当然,这种东西只有事后才能发现真相.接下来,我将讲述一系列最近在我们一个应用上犯过的这种错误.最有意思的是,一开始的迹象揭示的问题,与实际发生的问题完全不同. 在一个凄凉的午夜 午夜刚过,我就被一条来自监控系统的警报吵醒了.Adventory,我们的 PPC (以点击次数收费)广告系统中一个负责索引广告的应用,很明显连续重启了好几次.在云端的环境里,实例的重启是很正常的,也不会触发报警,但

内存泄漏和内存溢出的优化

内存泄漏: 对象在内存heap堆中中分配的空间, 当不再使用或没有引用指向的情况下, 仍不能被GC正常回收的情况. 多数出现在不合理的编码情况下, 比如在Activity中注册了一个广播接收器, 但是在页面关闭的时候进行unRegister, 就会出现内存溢出的现象. 通常情况下, 大量的内存泄漏会造成OOM. OOM: 即OutOfMemoery, 顾名思义就是指内存溢出了. 内存溢出是指APP向系统申请超过最大阀值的内存请求, 系统不会再分配多余的空间, 就会造成OOM error. 在我们

Android 性能优化之内存泄漏检测以及内存优化(上)

在 Java 中,内存的分配是由程序完成的,而内存的释放则是由 Garbage Collecation(GC) 完成的,Java/Android 程序员不用像 C/C++ 程序员一样手动调用相关函数来管理内存的分配和释放,虽然方便了很多,但是这也就造成了内存泄漏的可能性,所以记录一下针对 Android 应用的内存泄漏的检测,处理和优化的相关内容,上篇主要会分析 Java/Android 的内存分配以及 GC 的详细分析,中篇会阐述 Android 内存泄漏的检测和内存泄漏的常见产生情景,下篇会

Handler可能导致的内存泄漏及其优化

package cc.cc; import java.lang.ref.WeakReference; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; /** * Demo描述: * Handler可能导致的内存泄露及其优化 * * 1 关于常见的Handler的用法但是可能导致内存泄露 * 请参考方法initHandler()

Android性能优化之避免内存泄漏的建议

在android程序开发中,内存泄漏问题是比较常见的问题,相信有过一些android编程经历的程序猿都遇到过各种各样的内存泄漏.内存泄漏是造成应用程序OOM的主要原因之一,是编程中必须避免的问题.下面小编搜罗了几个避免内存泄漏的建议,分享给大家,一起来看看吧. 1.对于生命周期比Activity长的对象,如果需要应该使用ApplicationContext : 2.在涉及到Context时先考虑ApplicationContext,当然它并不是万能的,对于有些地方则必须使用Activity的Co

android 内存泄漏和内存优化方案

一般来说的内存泄漏指的是已经不需要使用的对象因为一直被其他对象持有引用导致无法及时被系统所回收,以致该对象在堆中所占用的内存单元无法被释放而造成内存空间浪费. 在编写代码的时候很多不良的习惯会导致内存泄漏,相信刚开始的时候许多人只会注重功能的实现,对内存的优化不会花太多的时间,那么哪些情况会造成内存的泄漏呢,我来举例说明 单例导致内存泄露 单例模式在Android开发中会经常用到,但是如果使用不当就会导致内存泄露.因为单例的静态特性使得它的生命周期同应用的生命周期一样长,如果一个对象已经没有用处

Android性能优化之内存泄漏

综述 内存泄漏(memory leak)是指由于疏忽或错误造成程序未能释放已经不再使用的内存.那么在Android中,当一个对象持有Activity的引用,如果该对象不能被系统回收,那么当这个Activity不再使用时,这个Activity也不会被系统回收,那这么以来便出现了内存泄漏的情况.在应用中内出现一次两次的内存泄漏获取不会出现什么影响,但是在应用长时间使用以后,若是存在大量的Activity无法被GC回收的话,最终会导致OOM的出现.那么我们在这就来分析一下导致内存泄漏的常见因素并且如何