c# 内存泄漏检查心得
系统环境 windows 7 x64
检查工具:ANTS Memory Profiler 7 或者 .NET Memory Profiler 4.0
开发的软件为winform / windows service 形式,form配置task和trigger ,service使用quartz定时调度任务。
框架:.net framework 4.0/4.5
可能有内存泄漏问题组件:
- npoi 2.0.1
- System.Data.SQLite.1.0.88.0 准备升级致 System.Data.SQLite.1.0.89.0
- quartz.net
quartz.net 中有 dbcommond 没有dispose 会造成SqliteParameter中的托管内存未释放
connection只进行close,未dispose也会造成内存泄漏
检查出的内存泄漏对象
- Process.GetCurrentProcess() 在commonlogging中频繁调用,居然占用很大内存,20分钟有83万个对象之多,有49个对象未释放。后改为静态变量引用获得的当前线程
- IUnityContainer container = GetOrCreateSessionWrapper().unity.CreateChildContainer();
也许是设计上的bug,在web下,session request各有自己的ioc容器, 且为父容器与子容器的关系,而在winform下,Context的request和session写成没有缓存时,会在每次调用时创建,造成频繁创建子容器,而又无法象web一样释放request级别的所有对象。
- 查了2个多星期,交付日期越来越近,更新到quartz.net 2.2 ,quartz net 2.2中仍有 IDbCommond 没有dispose 会造成SqliteParameter中的托管内存未释放
- quartz.net 2.2 重写jobstore,获取idbconnection时从线程缓存中获取,并且不关闭connection, 这样可以避免 Sqlite3, List<SQLiteFunction>对象不断变大的问题。
- 过程中也发现有大量非托管内存泄漏,也可以尝试 Marshal.Clean..的相关方法释放(目前还没有办法验证)。
c# 内存泄漏检查心得的更多相关文章
- Windows平台上C++开发内存泄漏检查方法
充分的利用调试工具可以非常方便地避免内存泄漏问题. 这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator.这两种方法的基本原理是一 ...
- BCB:内存泄漏检查工具CodeGuard
一.为什么写这篇东西 自己在使用BCB5写一些程序时需要检查很多东西,例如内存泄漏.资源是否有释放等等,在使用了很多工具后,发觉BCB5本身自带的工具―CodeGuard,非常不错,使用也挺方便的,但 ...
- iOS学习——内存泄漏检查及原因分析
项目的代码很多,前两天老大突然跟我说项目中某一个ViewController的dealloc()方法没有被调用,存在内存泄漏问题,需要排查原因,解决内存泄漏问题.由于刚加入项目组不久,对出问题的模块的 ...
- C/C++应用程序内存泄漏检查统计方案
一.前绪 C/C++程序给某些程序员的几大印象之一就是内存自己管理容易泄漏容易崩,笔者曾经在一个产品中使用C语言开发维护部分模块,只要产品有内存泄漏和崩溃的问题,就被甩锅“我的程序是C#开发的内存都是 ...
- Linux 内存泄漏检查工具 valgrind
抄自<从零开始的JSON库教程>,先mark一下,以后再慢慢研究. ======== 引用分割线 ======== 在 Linux.OS X 下,我们可以使用 valgrind 工具(用 ...
- 检查c# 内存泄漏
c# 内存泄漏检查心得 系统环境 windows 7 x64 检查工具:ANTS Memory Profiler 7 或者 .NET Memory Profiler 4.0 开发的软件为winform ...
- 用mtrace检查内存泄漏
http://blog.csdn.net/ixidof/article/details/6638066内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的&qu ...
- mtrace检查内存泄漏
内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 一章 (执行info libc);glib ...
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...
随机推荐
- python pip 安装OpenCV
cmd pip install opencv-contrib-python -i https://pypi.mirrors.ustc.edu.cn/simple/
- PHP之mb_strrpos使用
mb_strrpos (PHP 4 >= 4.0.6, PHP 5, PHP 7) mb_strrpos - Find position of last occurrence of a stri ...
- MySQL Group Replication 介绍
2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...
- JVM的类加载时机
类加载过程中每个步骤的顺序 我们已经知道,类加载的过程包括:加载.连接.初始化,连接又分为:验证.准备.解析,所以说类加载一共分为5步:加载.验证.准备.解析.初始化. 其中加载.验证.准备.初始化的 ...
- [心平气和读经典]The TCP/IP Guide(003)
The TCP/IP Guide [Page 43, 44] Scope of The TCP/IP Guide | 本书的讨论范围 The first step to dealing with a ...
- STL 排序(转载)
这篇文章关于STL中的排序写的虽不深入,但是还是挺好的. 1.sort sort有两种形式,第一种形式有两个迭代器参数,构成一个前开后闭的区间,按照元素的 less 关系排序:第二种形式多加一个指定排 ...
- SQL脚本添加删除修改字段
1.增加字段 alter table docdsp add dspcodechar(200)2.删除字段 ALTER TABLE table_NAME DROP COLUMNc ...
- 开始使用 Vuejs 2.0 ---简单总结2
Vuejs的常用指令 v-html v-show v-if v-for v-on 1 .v-html v-html 更新元素或者变量的innerHTML,按普通html解析,和v-text的区别是在变 ...
- 深入redis内部--实现字符串
redis字符串的定义和实现在Ssd.h和Ssd.c中. 1.定义 typedef char *sds; //本质是字符char的指针 2.字符串的操作 sds sdsnew(const char * ...
- JAVA-2NIO之Channel
注意:转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(二) Channel Channel Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可 ...