链接字符串方法时的内存消耗
Memory consumption when chaining string methods
我知道 C# 中的 string
是不可变类型。当您链接字符串函数时,每个函数都会实例化一个新的 string
是真的吗?
如果是这样,使用链接方法对 string
进行过多操作的最佳做法是什么?
Is it true that when you chain string functions, every function instantiates a new string
?
总的来说,是的。 returns 修改字符串的每个函数都通过创建一个新的字符串对象来实现,该对象包含与原始字符串分开存储的完整新字符串。
有一些方法可以避免这种情况,尤其是在从不同部分创建字符串时使用 StringBuilder
。但总的来说,很难说如何在不创建多个中间字符串对象的情况下做出更好的东西。
虽然这听起来很糟糕,但这通常不是什么大问题:虽然它可能很昂贵,但由于字符串操作而导致的无关字符串对象很少会成为性能不佳的根源。除非你正在用字符串做高性能的事情,否则你可能会忽略你不断创建新对象然后被丢弃的事实。如果您以后有疑问,您可以随时分析您的代码以了解它是否真的重要。
我们在绑定到 UI 的模型中使用了一种特殊方法来获取该对象的唯一 ID。该方法将使用 + 运算符连接一些字符串。
它有时会在一秒钟内被调用 10000 次或更多次,这在加载新数据时会减慢整个应用程序的速度。首次在应用程序中加载某些屏幕时,这是一个严重的瓶颈。所以我想如果你不调用使用字符串操作的代码每秒至少几千次那么你没问题。
还有一个 string.Format 方法,它在长 运行 中快了几倍。
I know that string in C# is an immutable type. Is it true that when you chain string functions, every function instantiates a new string?
是的,字符串是不可变的,因此它们根本无法更改。但并不是每个函数都会实例化一个新字符串,因为有些函数可能容易受到 string interning 的影响(相同文本的字符串可以(但不总是!)驻留在相同的内存中 space)
If it is true, what is the best practice How to do too many manipulations on a string?
最常用的两种方法是首先使用 StringBuilder
or via a String.Format
构建字符串
我知道 C# 中的 string
是不可变类型。当您链接字符串函数时,每个函数都会实例化一个新的 string
是真的吗?
如果是这样,使用链接方法对 string
进行过多操作的最佳做法是什么?
Is it true that when you chain string functions, every function instantiates a new
string
?
总的来说,是的。 returns 修改字符串的每个函数都通过创建一个新的字符串对象来实现,该对象包含与原始字符串分开存储的完整新字符串。
有一些方法可以避免这种情况,尤其是在从不同部分创建字符串时使用 StringBuilder
。但总的来说,很难说如何在不创建多个中间字符串对象的情况下做出更好的东西。
虽然这听起来很糟糕,但这通常不是什么大问题:虽然它可能很昂贵,但由于字符串操作而导致的无关字符串对象很少会成为性能不佳的根源。除非你正在用字符串做高性能的事情,否则你可能会忽略你不断创建新对象然后被丢弃的事实。如果您以后有疑问,您可以随时分析您的代码以了解它是否真的重要。
我们在绑定到 UI 的模型中使用了一种特殊方法来获取该对象的唯一 ID。该方法将使用 + 运算符连接一些字符串。
它有时会在一秒钟内被调用 10000 次或更多次,这在加载新数据时会减慢整个应用程序的速度。首次在应用程序中加载某些屏幕时,这是一个严重的瓶颈。所以我想如果你不调用使用字符串操作的代码每秒至少几千次那么你没问题。
还有一个 string.Format 方法,它在长 运行 中快了几倍。
I know that string in C# is an immutable type. Is it true that when you chain string functions, every function instantiates a new string?
是的,字符串是不可变的,因此它们根本无法更改。但并不是每个函数都会实例化一个新字符串,因为有些函数可能容易受到 string interning 的影响(相同文本的字符串可以(但不总是!)驻留在相同的内存中 space)
If it is true,
what is the best practiceHow to do too many manipulations on a string?
最常用的两种方法是首先使用 StringBuilder
or via a String.Format