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..的相关方法释放(目前还没有办法验证)。

检查c# 内存泄漏的更多相关文章

  1. LeakCanary 来检查 Android 内存泄漏

    LeakCanary 来检查 Android 内存泄漏

  2. VS环境下C++如何检查是否内存泄漏

    c++如何检查是否内存泄漏 今天在做OpenGL引擎的时候,突然想到检查一下内存泄漏.具体是我做了一个渲染类Render,将所有世界中存在的物体的指针都存放在这个类中.于是我不免担心,在Render中 ...

  3. monkey测试===通过monkey测试检查app内存泄漏和cpu占用

    最近一直在研究monkey测试.网上资料很多,但都是一个抄一个的.原创的很少 我把检查app内存泄漏的情况梳理一下: 参考资料: Monkey测试策略:https://testerhome.com/t ...

  4. 利用 LeakCanary 来检查 Android 内存泄漏

    前言 你被概率性的 OOM 困扰么?有时候,OOM 像幽灵一样,挥之不去,可真想把它揪出来时,又捉之不着.或许,是时候用 LeakCanary 来诊断一下了.它是一个用来检查 Android 下内存泄 ...

  5. valgrind检查代码内存泄漏,5种内存泄漏情况

    摘要: valgrind是linux下用于调试程序和查找内存泄露的常用工具.valgrind会报告5种内存泄露,"definitely lost", "indirectl ...

  6. valgrind检查C++内存泄漏

    valgrind --tool=memcheck --leak-check=full ./httptest Valgrind 使用 用法: valgrind [options] prog-and-ar ...

  7. 【腾讯优测干货分享】Android内存泄漏的简单检查与分析方法

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d14047603a5bf1242ad01b 导语 内存泄漏问题大约是An ...

  8. Java内存泄漏分析与解决方案

    Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历 ...

  9. Java内存泄漏分析和预防

    1. 什么是内存泄漏?有什么危害 书面说法: 内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个 ...

随机推荐

  1. 2015年第12本(英文第8本):the Old Man and the Sea 老人与海

    书名:The Old Man and The Sea(老人与海) 作者:Ernest Hemingway 单词数:2.7万 不重复单词数:2600 首万词不重复单词数:1500 蓝思值:940 阅读时 ...

  2. IOS 自定义按钮(代码实现)+九宫格

    在一些下载应用里整个页面都是按钮,有好多好多,但是仔细观察不难发现他们很有规律.就像下面一样

  3. iOS开发网络篇—NSURLConnection基本使用(二)

    1.常用的类       NSURL:请求地址 NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有:      一个NSURL对象      请求方法.请求头.请 ...

  4. android activity 管理器AMS----概述

    AMS & WMS,应该是app端打交道最多的2个framwork层的service. ActivityManagerService 是android提供给用于管理Activity运行状态的系 ...

  5. 开源项目go2o - golang版的o2o项目

    发一个github上唯一用golang实现的o2o项目 What's Go2o Golang combine simple o2o DDD domain-driven design realizati ...

  6. rails关于utf8问题-------------------utf8申明必须置顶

    utf-8必须置顶,如果放在其他位置,会导致后面如果遇到中文无法解析,然后报其他乱七八糟的错误,比如不能连接数据库,比如语法错误......这种错误不好找,切记!!! 出错代码: #!/bin/env ...

  7. strcpy

    /********************** *C语言标准库函数strcpy的一种典型的工业级的最简实现 *返回值:目标串的地址. *对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返 ...

  8. TCP面向连接网络编程

    一 TCP&UDP协议 TCP,Tranfer Control Protocol,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对 ...

  9. MongoDB(一)

    问题解决 1.由于目标计算机积极拒绝 无法连接 原因:还没有启动mongodb,就使用mongo命令 解决方法:在bin目录下输入 mongod --dbpath XXXX/data 然后在输入 mo ...

  10. linux下RTNETLINK answers: File exists的解决方案

    重启网卡时 出现 :RTNETLINK answers: File exists  提示 以下是网卡出来错误的解决方法: 第一种: 和 NetworkManager 服务有冲突,这个好解决,直接关闭 ...