C#:在对象中使用未使用的变量的开销

时间:2010-08-11 06:13:53

标签: c# oop

使用C#,是否有一个较大的对象包含大量的字符串变量 - 其中一半从未在同一个实例中使用,而不是2个对象包含一半的字符串变量,其中所有变量都将在所有情况下使用?

我的问题可能实际上是:在对象中有大量空字符串变量会有什么开销?我在谈论20个未使用的字符串变量。

4 个答案:

答案 0 :(得分:6)

20个未使用的字符串变量可能会浪费每个实例80或160个字节,具体取决于您使用的是32位还是64位CLR。每个字段的值将是一个引用,这就是它取决于CLR的原因。 (由于填充,可能会浪费更多;这取决于对象的细节。)

这是否显着取决于你使用这些对象的程度 - 显然你占用的空间越多,垃圾收集器就越难以工作,你的应用程序将占用更多的内存。如果你有一百万个这些物体在任何一个点“活着”,它们将浪费大约80或160MB。这有意义吗?这取决于你的情况。

答案 1 :(得分:2)

微乎其微。甚至不要冒汗。

话虽如此,从设计的角度来看,这很可能是一个坏主意。

答案 2 :(得分:1)

.NET中的字符串是interned,这意味着整个应用程序中只有一个唯一字符串实例。唯一的开销是对该字符串的引用(本质上是一个指针),它是非常小的担心。 编辑正如Jon所评论的那样,字符串仅在字符串文字即var str = "literal";时才会被实现,但如果需要,可以轻松地手动实现字符串,如MSDN链接所示。

不要构造类可能会节省几个字节,使您的类可读并且易于使用。运行时很聪明,会为您处理运行时性能。

答案 3 :(得分:0)

在我看来,费奥多尔是对的。 这一点可能不是开销,但是如果有很多空字符串对于你的精化流程或者只是一个糟糕的设计问题真的很有用。 在第二种情况下,您需要考虑您的个人开销来维护如此庞大的代码。