zoukankan      html  css  js  c++  java
  • 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..的相关方法释放(目前还没有办法验证)。

       

     
     

  • 相关阅读:
    zabbix短信网关调用问题总结
    zabbix短信接口调用
    Windows Open with Sublime Text
    [转载]windows下安装Python虚拟环境virtualenvwrapper-win
    Resilio-sync auto restart
    django-orm-standalone
    RabbitMQ笔记
    RabbitMQ启动出错:- unable to connect to epmd on xxxx: timeout (timed out)
    [Python笔记]第十六篇:web框架之Tornado
    [前端笔记]第三篇:JavaScript
  • 原文地址:https://www.cnblogs.com/68681395/p/3392941.html
Copyright © 2011-2022 走看看