在重载的finalize和dispose方法里面,还需要去设置成员变量都为null吗?

问题描述

如题,需要吗?.......还是要看不同的情况?

解决方案

解决方案二:
怎么finalize都出来了?
解决方案三:
建议你设置一下
解决方案四:
引用2楼bdmh的回复:

建议你设置一下

为何?
解决方案五:
引用3楼decs87的回复:

Quote: 引用2楼bdmh的回复:
建议你设置一下

为何?

设置为nul,明确告诉gc,head中这个对象没有被引用。
解决方案六:
引用4楼smthgdin的回复:

Quote: 引用3楼decs87的回复:
Quote: 引用2楼bdmh的回复:
建议你设置一下

为何?

设置为nul,明确告诉gc,head中这个对象没有被引用。

或者更明确说,设置为null,就等于将stack中指向该对象的指针去掉,没有了指向这个对象的引用就可以被垃圾回收了。
解决方案七:
除非是静态变量不用了要设null,那些局部变量都不需要多此一举了吧
解决方案八:
finalize既然都被执行了,那么GC已经回收它了。无论如何也不需要设置什么null了。“皮都不在了”,你还去拔毛干什么呢?至于说dispose,你所说的finalize方法中几乎无一例外地、基本上都会调用自动dispose,并不需要手动调用dispose。而代码手动调用dispose跟GC无关,例如说及时调用DbConnection对象的dispose的目的是为了避免出现“连接池满”的异常所以在使用完之后不等它子弟自动finalize而手动调用dispose(因为dispose中会自动调用其Close方法)。调用dispose跟什么内存释放无关。你知道dispose里边有什么其它的原因,才需要调用它。否则过早地调用dispose不但是多余的,而且是减慢了程序速度的(虽然减慢的微乎其微)。一些学过一点c语言的人动不动就纠结什么“内存释放”问题,这在.net和java中很少用这类问题来消磨时光。而通常直接研发讨论高级的技术设计问题。
解决方案九:
如果说“什么都做一下,没功劳也有苦劳啊!”这种观点,我觉得是个悲催的悖论。比如说如果你的程序发生产生内存泄露,而以在某些地方需要将变量赋值null,那么我的观点是你要学习正规的自动化测试方法,你的测试程序每天跑上万个单元测试,其中有一些就是用来检测疑似内存泄露的。然后发现了,再设置null。而“不管又没用都设置null”的编程习惯,我认为是个逃避问题从而也不能了解问题的办法。

时间: 2024-10-31 06:05:31

在重载的finalize和dispose方法里面,还需要去设置成员变量都为null吗?的相关文章

对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会

编程 Finalize 和Dispose(bool disposing)和 Dispose() 的相同点: 这三者都是为了释放非托管资源服务的. Finalize 和 Dispose() 和Dispose(bool disposing)的不同点: Finalize是CRL提供的一个机制, 它保证如果一个类实现了Finalize方法,那么当该类对象被垃圾回收时,垃圾回收器会调用Finalize方法.而该类的开发者就必须在Finalize方法中处理 非托管资源的释放. 但是什么时候会调用Finali

Finalize和Dispose与析构的区别

在CLR中内存管理的真正工作是由IDisposable接口的Dispose()方法和类的析构函数完成的.当有非托管资源需要释放的时候,通常应该执行Finalize()方法来代替析构函数. IDisposable是一个接口,它并不局限在C#中,它是Microsoft的COM技术的一部分,它提供的一个用于清理不仅仅是C#内的各种类型的组件的通用机制.类似与IDisposable的接口使得C#适用于.NET框架.IDisposable定义了一个专门的方法,Dispose(). 在类中如果有必须被释放的

C# Graphics对象调用Dispose()方法后,为什么绘制的图像还在?

问题描述 C#中Graphics对象调用Dispose()方法后,为什么窗体绘制的图像还在?Dispose()方法不是已经将Graphics对象清除了吗?请大虾根据这个问题,详细解释下原理,谢谢.GraphicsobjGraphics=null;objGraphics=this.CreateGraphics();objGraphics.Clear(SystemColors.Control);objGraphics.DrawRectangle(Pens.Blue,a.Left-1,a.Top-1,

一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数

Windows是一个消息驱动的操作系统,在系统中发生的所有消息均需要通过消息处理过程(或叫窗口过程)进行处理.由于C++给我们在程序设计中带来更多的灵活性(如继承.重载.多态等),所以我们都希望能够使用C++的类来封装Windows中的窗口过程函数,但是Windows规定了窗口过程函数必须定义为一个全局函数,也就是说需要使用面向过程的方法来实现,为了使用面向对象的技术来实现消息处理,我们必须另辟它径.目前我们在网络上见得比较多的方式是使用Thunk将即将传递给窗口过程的第一个参数(HWND hW

Java中方法的重写与成员变量的隐藏

这篇文章讨论了Java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量) 在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么? /**   * @author Hollis 17/9/27.   */  public class FieldOverriding {        public static void main(String[] args) {          Sub c1 = new Sub();          System.

成员变量和方法的override的详解

变量|详解 原题://file: MyMain.class class Base{int a=10;public void show(){  System.out.println(a);}} class Ext extends Base{int a=200;public void show(String s){  System.out.println(s);}} public class MyMain{public static void main(String[] argv){  Ext ob

那些年的网站推广方法你还在用吗

做晓风晓风彩票网站优化至今,摸索.积累的网站推广的方法众多,如何在这些方法中找到适合自己晓风彩票网站的营销方式尤其重要.为将自身的晓风彩票网站优化做到极致,我经常分析竞争对手网站优化方法.取其精华,去其糟粕,竞争对手有的,我也有,竞争对手没有的优化方法我还有.百度算法在调整,优化方法也需调整,但是不管怎样调整,网站推广方法不变,正所谓万变不离其宗.那些年的网站推广方法你还在用吗? 一. 论坛推广 论坛推广相信许多站长还在用,在做网站推广时,这块资源是不可丢的.本人在做晓风彩票网站,也会利用这块资

无线路由器使用方法,教你怎么设置无线路由

无线路由器使用方法,教你怎么设置无线路由 一.无线路由器基本使用方法 1.拿到手的无线路由器,连接好电源 2.无线路由器一般背面有5个网线插孔,一个WAN口和四个LAN口. WAN口是与ADSL猫的连接的(运营商为你开通的接口),所以这个地方要用网线与你的猫或光纤接口连接. 3.另外4个LAN口是用来连接台式机的,当然你也可以用来连接笔记本. 连线设置完成! 二.无线路由器软件设置方法 要让无线路由器正常工作,需要对路由器进行软件设置,告诉路由器你的ADSL用户名和密码,还有如何对你的无线网络进

jQuery使用CSS()方法给指定元素同时设置多个样式

 这篇文章主要介绍了jQuery使用CSS()方法给指定元素同时设置多个样式的方法,实例分析了jQuery中css方法的使用技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了jQuery使用CSS()方法给指定元素同时设置多个样式的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!DOCTYPE html> <html> <head> <