C#是否重用未被GC销毁的现有对象?

时间:2011-12-08 07:18:51

标签: c# garbage-collection c#-3.0

我有一个名为MyObject的对象。它提供了一些商务操作,不包含任何数据。在源代码中,我将其初始化以执行一些操作:

MyObject myObj = new MyObject();

在其他地方我用不同的名称初始化一个新的:

MyObject BuObj = new MyObject();

如果myObj没有被GC销毁,那么MyObject也是如此。所以当我初始化BuObj时,C#重用MyObject for BuObj而不是初始化一个新的吗?

3 个答案:

答案 0 :(得分:5)

您需要区分变量myObj)和变量值引用的对象。 变量永远不会被垃圾收集 - 只有对象可以。

但不,.NET不会重复使用同一个对象:你已经要求一个新对象,所以它会创建一个新对象。

(在创建空字符串方面存在一个小角点情况,其中new运算符恰好返回对现有对象的引用,但您通常可以忽略它。)

答案 1 :(得分:3)

不,它会创建一个新的。 C#/ .Net GC不会重用现有对象,只会销毁它们。

你所说的是一个对象池;如果你想利用这个概念,你必须自己实现这个功能,或找到一个现有的库。但“新”仍将只创建一个新对象。

答案 2 :(得分:0)

简而言之,C#不会重复使用任何对象。