我一直在修复winforms应用程序中的一些内存泄漏问题,并注意到一些未明确部署的一次性对象(开发人员没有帮助,因为它没有进入 if (disposing) 子句 . 所有静态事件取消注册和收集清除已经放入 if (disposing) clause . 如果对象是一次性的,最好的做法就是调用Dispose,但不幸的是,有时会发生这种情况

如果有非托管对象,静态事件处理程序和某些托管集合需要在处理时清除 . 什么是决定应该进入的方式以及 if (disposing) 条款的内容 .

// Dispose(bool disposing) executes in two distinct scenarios.

// If disposing equals true, the method has been called directly

// or indirectly by a user's code. Managed and unmanaged resources

// can be disposed.

// If disposing equals false, the method has been called by the

// runtime from inside the finalizer and you should not reference

// other objects. Only unmanaged resources can be disposed.

protected virtual void Dispose(bool disposing)

{

if (!disposed)

{

if (disposing)

{

// Free other state (managed objects).

}

// Free your own state (unmanaged objects).

// Set large fields to null.

disposed = true;

}

}

It says托管对象应该在 if (disposing) 中,只有在开发人员显式调用Dispose方法时才能正常执行 . 如果已经实现了Finalize方法并且开发人员忘记调用Dispose方法,那么通过Finalizer执行的执行不会进入 if (disposing) 部分 .

以下是我的问题 .

如果我有静态事件处理程序导致内存泄漏我应该在哪里取消注册?进出 if (disposing) 条款?

如果我有一些导致内存泄漏的集合,我应该在哪里清除它们?进出 if (disposing) 条款?

如果我正在使用第三方一次性对象(例如:devExpress winform控件),我不确定它们是托管对象还是非托管对象 . 让's say I want to dispose them when disposing a form. How can I know what are managed and what are non-managed objects? Being disposable doesn' t说出来?在这种情况下,如何决定应该进入什么以及 if (disposing) 条款的内容?

如果我不确定管理或解除管理的事情,那么从 if (disposing) 条款中处理/清除/取消注册事件可能会产生什么不良后果?让我们说它在处置之前检查null?

Edit

我的意思是事件取消注册就像下面这样 . Publisher是一个长期存在的实例,下面的行位于订阅者的构造函数中 . 在这种情况下,订户需要取消注册事件并在发布者之前进行处置 .

publisher.DoSomeEvent += subscriber.DoSomething;

java idisposable_IDisposable实现 - 'if (disposing)'应该怎么做相关推荐

  1. 由浅入深学java iso_由浅入深学Java:基础、进阶与必做260题 PDF扫描版[47MB]

    由浅入深学Java:基础.进阶与必做260题讲解了Java方方面面的知识,全书共分为4篇共28章,第1篇从最基本的JDK安装讲起,包括基本语法与数据类型.数组.字符串.程序控制语句.面向对象编程.继承 ...

  2. 由浅入深学java pdf_由浅入深学Java:基础、进阶与必做260题 PDF_IT教程网

    资源名称:由浅入深学Java:基础.进阶与必做260题 PDF 第1篇  语言基础篇 第1章  Java入门(教学视频:18分钟) 1.1  Java简介 1.2  Java的特点 1.3  JDK的 ...

  3. 华为校招java笔试题库_华为校招Java笔试题库,看你会不会做

    1.在java中如果声明一个类为final,表示什么意思? 答:final是最终的意思,final可用于定义变量.方法和类但含义不同,声明为final的类不能被继承. 2.父类的构造方法是否可以被子类 ...

  4. python和java哪个更适合大数据-要做大数据工程师,Java和Python哪个更有优势?

    目前Java和Python是做大数据平台开发最常见的两种编程语言,当然还有Scala和R,下面千锋广州老师简单的分析一下Java与Python在做大数据开发时的优缺点,具体选择哪个可以根据实际情况来判 ...

  5. java服务端开发 php_PHP使用thrift做服务端开发

    php中文网最新课程 每日17点准时技术干货分享 php使用thrift做服务端开发 thrift采用接口描述语言定义和创建服务,用二进制格式传输数据,体积更小.效率更高,对于高并发.数据量大和多语言 ...

  6. Java与本机代理–他们所做的强大功能

    在安装代理之前应了解的内容以及它如何影响您的代码 在构建可伸缩的服务器端应用程序时,我们花费大量时间思考如何在生产中监视,操作和更新代码. 已经开发出一种新的工具来帮助Java和Scala开发人员做到 ...

  7. java none怎么用tomcat_使用tomcat做java中间件

    tomcat是一个老牌的中间件了,从我从业到现在时不时都会遇到它,方便.灵活.性能一般是我对它的使用经验总结. 配置 注意 : tomcat 7 和 6 有很大差别,server.xml catali ...

  8. python可以测试java的代码吗_使用python做你自己的自动化测试--对Java代码做单元测试 (2)-导入第三方jar包裹...

    使用Jython对Java做单元测试,当然,为了测试开发java代码.这涉及到引入第三包的问题,如何导入第三方的包? 您可以使用http://blog.csdn.net/powerccna/artic ...

  9. 为了在简历上写掌握【Java多线程和并发编程】,做了两万字总结

    文章目录 概述 继承Thread类 实现Runnable接口 实现Callable接口 线程池 线程的五大状态 多线程买票案例 死锁 Lock锁 生产者消费者问题 八锁问题 volatile 写在后面 ...

  10. Java编程中“为了性能”尽量要做的26点

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

最新文章

  1. cdn加速的原理是怎么样的
  2. 如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)
  3. Git篇——Git使用教程
  4. 关于jQuery中的trigger和triggerHandler方法的使用
  5. 雪花算法原理_低照度摄像机原理及影响图像效果因素
  6. dotNet Core 3.1 使用 Aspose (部署 Docker)
  7. 实例演示oracle注入获取cmdshell的全过程
  8. sshpass远程执行脚本_终端-Linux命令之非交互SSH密码验证-Sshpass
  9. kingdee kis
  10. iOS开发拓展篇—UIDynamic(捕捉行为)
  11. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
  12. 阿里矢量图标库 - Unicode 方式使用说明(两种用法)
  13. 软考真题答案-2021年11月系统集成项目管理工程师上午题(一)
  14. 树莓派装Aria2和YAAW实现无人值守远程离线下载服务
  15. 跟着开源项目学因果推断——CausalImpact 贝叶斯结构时间序列模型(二十一)
  16. Win11如何优化服务?Win11优化服务的方法
  17. 数学建模:多项式拟合并判断可决系数R²
  18. 阿诺德·施瓦辛格的演讲(拼命才会优秀,自律才会自由~)
  19. 【Matlab图像去噪】小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含源码 462期】
  20. 7-1 软硬车厢交替排列 (13 分)

热门文章

  1. 一、Zstack基础知识(ZCCT云计算认证)
  2. vuecli3.0用scss写响应式网页,封装简单的百分比换算函数
  3. SpringBoot Validation参数校验 详解自定义注解规则和分组校验
  4. R语言--异常值检测
  5. HDU 2825 Wireless Password
  6. PROFINET 链路简述
  7. 微信开放平台与微信公众平台的支付关系
  8. android 死亡阴影,英雄无敌3死亡阴影
  9. 【EI稳定检索】第二届计算机科学、电子信息工程和智能控制技术国际会议(CEI 2022)
  10. python-opencv-使图片更清晰的几种方法