gpt4 book ai didi

c# - ToString 方法并返回静态字符串

转载 作者:行者123 更新时间:2023-12-03 20:22:11 24 4
gpt4 key购买 nike

类示例:

public class SomeType
{
private int type;

// some code...

public override string ToString ()
{
if (type == 1) return "One";
if (type == 2) return "Two";
}
}

现在想象一下应用程序在一秒钟内调用了数千次 ToString() 方法。

我的问题是:当我在像 something = myClass.ToString() 这样的代码中使用内联创建的字符串时,每次调用都会创建一个新字符串,或者编译器会以某种方式优化它? (因为字符串是不可变的,所以它只能返回对静态字符串的引用)。

如果不是,出于性能原因,我是否应该创建静态私有(private)字符串字段并在 ToString 方法中返回它们?

当然,我会使用 Stopwatch 对其进行测试,但无论如何我都需要专家解答。

最佳答案

您正在使用字符串文字 - 这意味着您每次都返回对同一字符串的引用。这是由语言规范保证的。来自 C# 5 规范的第 2.4.4.5 节:

When two or more string literals that are equivalent according to the string equality operator (§7.10.7) appear in the same program, these string literals refer to the same string instance.

举个简单的例子:

string x = "One";
string y = "One";
Console.WriteLine(object.ReferenceEquals(x, y)); // Prints True

在您的代码中,ToString() 方法仍然会被调用 - 但它不会每次都创建一个新的字符串对象。顺便说一句,您可能会考虑使用 switch 语句来代替所有那些 if 语句。

请注意,即使它每次都确实创建了一个新字符串,但每秒创建数千 个字符串也不会使现代 CPU 出汗。分配器和垃圾收集器都非常高效,现代计算机可以在一秒钟内完成大量工作。

关于c# - ToString 方法并返回静态字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14113719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com