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

可能有内存泄漏问题组件:

  1. npoi 2.0.1
  2. System.Data.SQLite.1.0.88.0  准备升级致  System.Data.SQLite.1.0.89.0
  3. quartz.net

quartz.net 中有 dbcommond 没有dispose 会造成SqliteParameter中的托管内存未释放

connection只进行close,未dispose也会造成内存泄漏

检查出的内存泄漏对象

  1. Process.GetCurrentProcess() 在commonlogging中频繁调用,居然占用很大内存,20分钟有83万个对象之多,有49个对象未释放。后改为静态变量引用获得的当前线程
  2. IUnityContainer container = GetOrCreateSessionWrapper().unity.CreateChildContainer();

    也许是设计上的bug,在web下,session request各有自己的ioc容器, 且为父容器与子容器的关系,而在winform下,Context的request和session写成没有缓存时,会在每次调用时创建,造成频繁创建子容器,而又无法象web一样释放request级别的所有对象。

  3. 查了2个多星期,交付日期越来越近,更新到quartz.net 2.2 ,quartz net 2.2中仍有 IDbCommond 没有dispose 会造成SqliteParameter中的托管内存未释放
  4. quartz.net 2.2 重写jobstore,获取idbconnection时从线程缓存中获取,并且不关闭connection, 这样可以避免 Sqlite3, List<SQLiteFunction>对象不断变大的问题。
  5. 过程中也发现有大量非托管内存泄漏,也可以尝试 Marshal.Clean..的相关方法释放(目前还没有办法验证)。

最新文章

  1. Dijksktra(测试源代码)
  2. SQL Server时间粒度系列----第3节旬、月时间粒度详解
  3. hbase运行shell时ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 的解决办法
  4. [CoreOS 转载] CoreOS实践指南(五):分布式数据存储Etcd(上)
  5. 转 Android学习 之 ColorStateList按钮文字变色
  6. 正则表达式匹配中文字符串的文章URL
  7. [cocoapods]cocoapods问题解决
  8. Bugzilla 使用指南
  9. grunt-npm编译bootstrap源码
  10. BNU10806:请在此处签到
  11. iOS_SN_Socket - AsyncSocket
  12. [转载]Silverlight实用窍门系列:71.Silverlight的Style
  13. static 及 extern
  14. Idea中JavaWeb项目部署
  15. 【转载】C# 字符串截取
  16. [模板][P3803]多项式乘法
  17. 随机生成&amp;部门匹配
  18. BZOJ2671 : Calc
  19. 哎呀,我艹,使用tfs时候,离职人员锁定了代码.
  20. DUBBO - 分布式框架

热门文章

  1. 使用tinypng优化Android的资源图片
  2. Android-ListView类
  3. Android用路径api在内部存储读写文件
  4. iOS设计模式之策略模式
  5. CSS 通用和分组选择器(十)
  6. IOS 杂笔-13(appearance的巧妙使用)
  7. 故障时自动重启Apache
  8. animation of android (3)
  9. SQLServer中登录名的用户名配置
  10. MySQL 之 query cache